Преобразование многомерного массива в один массив

У меня есть массив, который многомерен без причины

/* This is how my array is currently */ Array ( [0] => Array ( [0] => Array ( [plan] => basic ) [1] => Array ( [plan] => small ) [2] => Array ( [plan] => novice ) [3] => Array ( [plan] => professional ) [4] => Array ( [plan] => master ) [5] => Array ( [plan] => promo ) [6] => Array ( [plan] => newplan ) ) ) 

Я хочу преобразовать этот массив в эту форму

 /*Now, I want to simply it down to this*/ Array ( [0] => basic [1] => small [2] => novice [3] => professional [4] => master [5] => promo [6] => newplan ) 

есть идеи как это сделать?

Предполагая, что этот массив может быть или не быть избыточно вложенным, и вы не знаете, насколько это глубоко, это должно сгладить его для вас:

 function array_flatten($array) { if (!is_array($array)) { return FALSE; } $result = array(); foreach ($array as $key => $value) { if (is_array($value)) { $result = array_merge($result, array_flatten($value)); } else { $result[$key] = $value; } } return $result; } 
 $array = array_column($array, 'plan'); 

Первый аргумент – массив | Второй аргумент – это ключ массива.

Примечание: array_column был представлен в PHP 5.5, поэтому он не будет работать в более ранних версиях.

Просто назначьте его своему собственному первому элементу:

 $array = $array[0]; 
  $singleArray = array(); foreach ($multiDimensionalArray as $key => $value){ $singleArray[$key] = $value['plan']; } 

это лучший способ создать массив из массива multiDimensionalArray.

благодаря

Для этого конкретного случая это будет делать:

 $array = array_map('current', $array[0]); 

Это, в основном, тот же самый вопрос, этот вопрос, посмотрите на некоторые ответы там: массив PHP сливается из неизвестного числа параметров .

Вы можете сделать это, просто используя цикл.

  $singleArray = array(); foreach ($multiDimensionalArray as $key => $value){ $singleArray[$key] = $value['plan']; } 

Недавно я использовал функцию array_flatten от AlienWebguy, но это дало мне проблему, из-за которой было очень сложно найти причину.
array_merge вызывает проблемы, и это уже не первый случай, когда у меня возникли проблемы с этим.
Если у вас одни и те же ключи массива в одном внутреннем массиве, которые вы делаете в другом, то более поздние значения будут перезаписывать предыдущие в объединенном массиве.

Вот другая версия array_flatten без использования array_merge:

 function array_flatten($array) { if (!is_array($array)) { return FALSE; } $result = array(); foreach ($array as $key => $value) { if (is_array($value)) { $arrayList=array_flatten($value); foreach ($arrayList as $listItem) { $result[] = $listItem; } } else { $result[$key] = $value; } } return $result; } 

Я сделал это с стилем ООП

 $res=[1=>[2,3,7,8,19],3=>[4,12],2=>[5,9],5=>6,7=>[10,13],10=>[11,18],8=>[14,20],12=>15,6=>[16,17]]; class MultiToSingle{ public $result=[]; public function __construct($array){ if(!is_array($array)){ echo "Give a array"; } foreach($array as $key => $value){ if(is_array($value)){ for($i=0;$i<count($value);$i++){ $this->result[]=$value[$i]; } }else{ $this->result[]=$value; } } } } $obj= new MultiToSingle($res); $array=$obj->result; print_r($array); 

Многомерный массив для одиночного массива с одним строковым кодом !!! Наслаждайтесь кодом.

 $array=[1=>[2,5=>[4,2],[7,8=>[3,6]],5],4]; $arr=[]; array_walk_recursive($array, function($k){global $arr; $arr[]=$k;}); print_r($arr); 

… Наслаждайтесь кодом.

 $flattenArray = []; foreach ($parentArray as $childArray) { foreach ($childArray as $value) { $flattenArray[] = $value; } }