我有一个无数的多维数组
/* 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
)
)
)
Run Code Online (Sandbox Code Playgroud)
我想将此数组转换为此表单
/*Now, I want to simply it down to this*/
Array (
[0] => basic
[1] => small
[2] => novice
[3] => professional
[4] => master
[5] => promo
[6] => newplan
)
Run Code Online (Sandbox Code Playgroud)
知道怎么做吗?
Ali*_*guy 84
假设这个数组可能会或可能不会被冗余嵌套,并且你不确定它的深度,这应该为你扁平化:
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;
}
Run Code Online (Sandbox Code Playgroud)
Usm*_*med 75
$array = array_column($array, 'plan');
Run Code Online (Sandbox Code Playgroud)
第一个参数是数组| 第二个参数是数组键.
注意:array_column是在PHP 5.5中引入的,因此它在早期版本中不起作用.
小智 8
问题数组:
\narray:2 [\xe2\x96\xbc\n 0 => array:3 [\xe2\x96\xbc\n 0 => array:4 [\xe2\x96\xbc\n "id" => 8\n "name" => "Veggie Burger"\n "image" => ""\n "Category_type" => "product"\n ]\n 1 => array:4 [\xe2\x96\xbc\n "id" => 9\n "name" => "Veggie Pitta"\n "image" => ""\n "Category_type" => "product"\n ]\n 2 => array:4 [\xe2\x96\xbc\n "id" => 10\n "name" => "Veggie Wrap"\n "image" => ""\n "Category_type" => "product"\n ]\n ]\n 1 => array:2 [\xe2\x96\xbc\n 0 => array:4 [\xe2\x96\xbc\n "id" => 18\n "name" => "Cans 330ml"\n "image" => ""\n "Category_type" => "product"\n ]\n 1 => array:4 [\xe2\x96\xbc\n "id" => 19\n "name" => "Bottles 1.5 Ltr"\n "image" => ""\n "Category_type" => "product"\n ]\n ]\n]\nRun Code Online (Sandbox Code Playgroud)\n解决方案数组:
\narray:5 [\xe2\x96\xbc\n 0 => array:4 [\xe2\x96\xbc\n "id" => 8\n "name" => "Veggie Burger"\n "image" => ""\n "Category_type" => "product"\n ]\n 1 => array:4 [\xe2\x96\xbc\n "id" => 9\n "name" => "Veggie Pitta"\n "image" => ""\n "Category_type" => "product"\n ]\n 2 => array:4 [\xe2\x96\xbc\n "id" => 10\n "name" => "Veggie Wrap"\n "image" => ""\n "Category_type" => "product"\n ]\n 3 => array:4 [\xe2\x96\xbc\n "id" => 18\n "name" => "Cans 330ml"\n "image" => ""\n "Category_type" => "product"\n ]\n 4 => array:4 [\xe2\x96\xbc\n "id" => 19\n "name" => "Bottles 1.5 Ltr"\n "image" => ""\n "Category_type" => "product"\n ]\n]\nRun Code Online (Sandbox Code Playgroud)\n编写此代码并得到您的解决方案,$subcate即您的多维数组。
$singleArrayForCategory = array_reduce($subcate, 'array_merge', array());\nRun Code Online (Sandbox Code Playgroud)\n
小智 7
$singleArray = array();
foreach ($multiDimensionalArray as $key => $value){
$singleArray[$key] = $value['plan'];
}
Run Code Online (Sandbox Code Playgroud)
这是从multiDimensionalArray数组创建数组的最佳方法.
谢谢
小智 7
如果遇到纯数据的多维数组,如下面的示例所示,则可以使用对array_merge()的单个调用通过反射来完成工作:
$arrayMult = [ ['a','b'] , ['c', 'd'] ];
$arraySingle = call_user_func_array('array_merge', $arrayMult);
// $arraySingle is now = ['a','b', 'c', 'd'];
Run Code Online (Sandbox Code Playgroud)
对于这种特殊情况,可以这样做:
$array = array_map('current', $array[0]);
Run Code Online (Sandbox Code Playgroud)
基本上,这是完全相同的问题,请看那里的一些答案:PHP数组来自未知数量的参数。
没有任何答案对我有帮助,以防我有多个级别的嵌套数组。该解决方案与@AlienWebguy 已经完成的几乎相同,但差异很小。
function nestedToSingle(array $array)
{
$singleDimArray = [];
foreach ($array as $item) {
if (is_array($item)) {
$singleDimArray = array_merge($singleDimArray, nestedToSingle($item));
} else {
$singleDimArray[] = $item;
}
}
return $singleDimArray;
}
Run Code Online (Sandbox Code Playgroud)
测试示例
$array = [
'first',
'second',
[
'third',
'fourth',
],
'fifth',
[
'sixth',
[
'seventh',
'eighth',
[
'ninth',
[
[
'tenth'
]
]
],
'eleventh'
]
],
'twelfth'
];
$array = nestedToSingle($array);
print_r($array);
//output
array:12 [
0 => "first"
1 => "second"
2 => "third"
3 => "fourth"
4 => "fifth"
5 => "sixth"
6 => "seventh"
7 => "eighth"
8 => "ninth"
9 => "tenth"
10 => "eleventh"
11 => "twelfth"
]
Run Code Online (Sandbox Code Playgroud)