2009-09-11 12 views
5

Say Mam tablicę par klucz/wartość w PHP:Jak połączyć klucze i wartości z tablicy w PHP

array('foo' => 'bar', 'baz' => 'qux'); 

Jaki jest najprostszy sposób, aby przekształcić to do tablicy, która wygląda następująco ?

array('foo=bar', 'baz=qux'); 

tj

array(0 => 'foo=bar', 1 => 'baz=qux'); 

w Perlu, zrobiłbym coś

map { "$_=$hash{$_}" } keys %hash 

Czy istnieje coś takiego w panoply of array functions w PHP? Nic, na co patrzyłem, nie wydawało mi się wygodnym rozwiązaniem.

Odpowiedz

9
function parameterize_array($array) { 
    $out = array(); 
    foreach($array as $key => $value) 
     $out[] = "$key=$value"; 
    return $out; 
} 
+0

Akceptuję tę odpowiedź, ponieważ jest prosta i jak doszło do rozwiązania mojego problemu. Jestem rozczarowany, że nie da się tego zrobić w jednym wyrażeniu, unikając potrzeby wprowadzenia tymczasowej zmiennej "$ out". – nohat

+3

Jeśli jesteś użytkownikiem języka Perl, będzie to tylko jeden z wielu, wielu rozczarowań, z którymi spotkasz się podczas korzystania z PHP. – chaos

+0

@chaos Tak, życie jest trudne, a php jest czytelny. @nohat Chociaż to nie "transformuje" tablicy, jak określa twoje pytanie. Tworzy nową. "Panoplia funkcji tablicy"? Chichot. – GZipp

0

Odpowiedź chaosu jest przyjemna i prosta. Jednak w bardziej ogólnym sensie mogłeś pominąć funkcję array_map(), o której wspomniałeś w swoim przykładzie map { "$_=$hash{$_}" } keys %hash.

+0

array_map(), wydaje się, daje tylko wartości tablicy – nohat

+0

Niestety, ścisły kod równoważny w PHP poniżej 5.3 to 'create_function()' -używający obrzydliwości. – chaos

+0

Ah, nie, jeśli potrzebujesz kluczy, możesz zamiast tego użyć 'array_walk()' (choć to modyfikuje tablicę w miejscu zamiast zwracania nowej tablicy). – Amber

3

A "ciekawy" sposób to zrobić = P

// using '::' as a temporary separator, could be anything provided 
// it doesn't exist elsewhere in the array 
$test = split('::', urldecode(http_build_query($test, '', '::'))); 
+0

Wpadłem na to samo rozwiązanie, ale jestem "ciekawy")) o procesie kodowania/dekodowania, jeśli jest monosemantic. Próbowałem go użyć do szybkiego ustawienia warunków zapytania w ORM, ale z jakiegoś powodu wątpliwości co do bezpieczeństwa danych, gdy urlencode/urldecode. –

13

Inną opcją dla tego problemu: o PHP 5.3+ można wykorzystać array_map() z zamknięciem (można to zrobić przed PHP 5.2, ale kod będzie dość niechlujny!).

"Och, ale na array_map() dostaniesz tylko wartość!".

Tak, zgadza się, ale możemy mapować więcej niż jedną tablicę! :)

$arr = array('foo' => 'bar', 'baz' => 'qux'); 
$result = array_map(function($k, $v){ 
    return "$k=$v"; 
}, array_keys($arr), array_values($arr)); 
Powiązane problemy