У меня есть массив, который многомерен без причины
/* 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; } }