将multidimensional array转换为单个数组
我有一个没有理由的multidimensional array
/* 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 ) ) )
我想将这个数组转换成这种forms
/*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数组创build数组的最佳方法。
谢谢
对于这个特定的情况,这将做到:
$array = array_map('current', $array[0]);
基本上这个问题是完全一样的,看看这里的一些答案: PHP数组从未知数量的参数合并 。
你可以使用循环来完成。
$singleArray = array(); foreach ($multiDimensionalArray as $key => $value){ $singleArray[$key] = $value['plan']; }
最近我一直在使用AlienWebguy的array_flatten函数,但它给了我一个很难find原因的问题。
array_merge会导致问题,这也不是我第一次遇到问题。
如果在另一个内部数组中具有相同的数组键,则后面的值将覆盖合并数组中的前一个数组键。
以下是不使用array_merge的array_flatten版本:
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; }
我用OOP风格做了这个
$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);
multidimensional 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; } }