Bez foreach , jak mogę zmienić taką tablicę
array("item1"=>"object1", "item2"=>"object2",......."item-n"=>"object-n");
do takiego ciągu
item1='object1', item2='object2',.... item-n='object-n'
Już o tym myślałem implode()
, ale nie powoduje implozji klucza.
Jeśli za każdym razem jest to konieczne, czy można nie zagnieżdżać wszystkich?
EDYCJA: Zmieniłem ciąg
EDIT2 / UPDATE: To pytanie zostało zadane dość dawno temu. W tamtym czasie chciałem napisać wszystko w jednej linii, więc użyłem operatorów trójskładnikowych i zagnieżdżonych wywołań funkcji na korzyść foreach. To nie była dobra praktyka! Pisanie kodu, który jest czytelny, czy jest zwięzły, czy nie, nie ma większego znaczenia.
W tym przypadku: umieszczenie foreach w funkcji będzie dużo bardziej czytelne i modularne niż pisanie tekstu w jednej linijce (chociaż wszystkie odpowiedzi są świetne!).
Odpowiedzi:
i w inny sposób:
lub:
źródło
echo "Hello, World!";
Czy mam zobaczyć przykłady kodu tych funkcji?array_fill(0, $input, 'selected-value-you want-to-check-against');
Spowoduje to wygenerowanie tablicy tego samego rozmiaru z jedną wartością dla wszystkich wierszy.Możesz użyć http_build_query , na przykład:
Wynik:
Próbny
źródło
http_build_query
.http_build_query
wurldecode
celu uniknięcia go.Wydałem pomiary (100000 iteracji), jaki jest najszybszy sposób na przyklejenie tablicy asocjacyjnej?
Cel: uzyskanie wiersza zawierającego 1000 pozycji w następującym formacie: „klucz: wartość, klucz2: wartość2”
Mamy tablicę (na przykład):
Test numer jeden:
Użyj http_build_query i str_replace :
Średni czas implodowania 1000 elementów: 0,00012930955084904
Test numer dwa:
Użyj array_map i implode :
Średni czas implodowania 1000 elementów: 0,0004890081976675
Test numer trzy:
Użyj array_walk i implode :
Średni czas implodowania 1000 elementów: 0,0003874126245348
Test numer cztery:
Użyj dla każdego :
Średni czas implodowania 1000 elementów: 0,00026632803902445
Mogę stwierdzić, że najlepszym sposobem na przyklejenie tablicy - użyj http_build_query i str_replace
źródło
$s = ''; foreach ($array as $k=>$v) { if ($s !== null) { $s .= ','; } $s .= "{$k}:{$v}"; }
przewyższa wszystkie inne.substr(str_replace('"', '', json_encode($headers)), 1, -1);
http_build_query
Zastępuje spacje z plus (+
) charakter.Użyłbym
serialize()
lubjson_encode()
.Chociaż nie da to dokładnego ciągu wynikowego, który chcesz, byłoby znacznie łatwiej zakodować / zapisać / pobrać / zdekodować później.
źródło
Korzystanie z array_walk
IDEONE
źródło
create_function
zamiast zwykłej funkcji anonimowej?Zmiana
jeśli chcesz przywrócić cały String bez ostatniego kleju $
I użycie:
źródło
Do celów debugowania. Rekursywnie zapisuje tablicę zagnieżdżonych tablic do ciągu. Używane foreach. Funkcja przechowuje znaki języka narodowego.
źródło
Możesz również użyć funkcji array_reduce w PHP ,
źródło
Do tworzenia mysql, gdzie warunki z tablicy
źródło
Istnieją również opcje var_export i print_r, które są bardziej znane z drukowania wyników debugowania, ale obie funkcje mogą przyjmować opcjonalny argument, aby zamiast tego zwrócić ciąg.
Na podstawie przykładu z pytania jako danych.
Używanie
print_r
do przekształcenia tablicy w ciągSpowoduje to wyświetlenie czytelnej dla człowieka reprezentacji zmiennej.
Wyświetli:
Używanie
var_export
do przekształcenia tablicy w ciągKtóry wyświetli reprezentację zmiennej w postaci ciągu php.
Wyświetli:
Ponieważ jest to poprawny php, możemy go ocenić.
Wyjścia:
źródło
Oto prosty przykład, używając class:
źródło