Как сгладить ассоциативный массив в массив с только значениями в PHP?

У меня есть массив, который имеет ключи и значения. Например:

Array ( [name] => aalaap [age] => 29 [location] => mumbai ) 

Я хочу преобразовать ключи из этого в значения, но я хочу, чтобы значения отображались сразу после клавиш. Например:

 Array ( [0] => name [1] => aalaap [2] => age [3] => 29 [4] => location [5] => mumbai ) 

Я могу легко написать итерационную функцию, которая сделает это … например, например:

 array_flatten($arr) { foreach ($arr as $arrkey => $arrval) { $arr_new[] = $arrkey; $arr_new[] = $arrval; } return $arr_new; } 

… но я пытаюсь выяснить, можно ли это сделать, используя array_combine , array_keys , array_values и / или array_merge , желательно в одном, поэтому мне не нужно использовать пользовательскую функцию.

Здесь?

Ваше собственное решение, вероятно, является самым чистым решением, поэтому преобразование его в «однострочный» :

 $array = array('name' => 'aalaap','age' => 29, 'location' => 'mumbai'); $answer = array(); array_walk($array, create_function('$val,$key', 'global $answer; $answer[]=$key; $answer[]=$val;')); var_dump($answer); 

Это позволяет избежать ненужных и дорогостоящих копий или сортировки массивов.

Альтернативно, потеряйте глобальное:

 array_walk($array, create_function('$val,$key,$result', '$result[]=$key; $result[]=$val;'), &$answer); 

Я не думаю, что это возможно – со встроенными функциями вы получите все ключи, а затем все значения:

 $a = array('a' => 'A', 'b' => 'B', 'c' => 'C'); $a = array_merge(array_keys($a), array_values($a)); print_r($a); 

Вам нужно будет использовать такой цикл:

 $b = array(); foreach ($a as $key => $value) { $b[] = $key; $b[] = $value; } 

PHP 5.3+ версия ответа Just Jules, и немного более читаемая:

 array_walk($array, function($val, $key) use (&$answer) { $answer[] = $key; $answer[] = $val; }); 

Это возможно, но я не думаю, что это более читаемо или быстрее. Он будет работать с менее известной функцией PHP – добавлением массива :

 $array = array('name' => 'aalaap', 'age' => 29, 'location' => 'mumbai'); # Separate keys and values into distinct arrays $keys = array_keys($array); $values = array_values($array); # Generate 2 new array containing indexes for the 2 arrays which contain # only odd/even numbers: $keysKeys = range(0, count($keys) * 2 - 1, 2); $valuesKeys = range(1, count($keys) * 2, 2); # Combine the keys with the values and add the results: $array = array_combine($keysKeys, $keys) + array_combine($valuesKeys, $values); # Sort the resulting array, otherwise the numbering will be broken # (1,3,5,2,4,6) ksort($array); # Result: var_dump($array); array(6) { [0]=> string(4) "name" [1]=> string(6) "aalaap" [2]=> string(3) "age" [3]=> int(29) [4]=> string(8) "location" [5]=> string(6) "mumbai" } 

Можно использовать array_reduce, чтобы приблизиться.

 array_reduce(array_keys($arr), function($carry, $key)use($arr){ $carry[] = $key; $carry[] = $arr[$key]; return $carry; }, array());