我似乎无法从以下foreach代码中获得任何结果。我似乎无法递归地运行数组,我无法生成这个数组的较小数组。我只是想从数组中挑选数据并将数据放在更小的数组中。
PHP代码
$ii = 0;
foreach ($array as $key => $value)
{
$vv = $value;
if($vv== 'Alpha')
{
$ii++;
$list[$ii]['info'] = $vv; // my new array
}
}
PHP print_r($ array)
Array
(
[0] => Array
(
[moredetails] => Array
(
[moredetails] => Array
(
[0] => Array
(
[productId] => 9999
[productName] => Name
[productType] => Alpha
[serialNumber] =>
[serviceItemId] => 123456
)
[1] => Array
(
[productId] => 8888
[productName] => Name
[productType] => Beta
[serialNumber] =>
[serviceItemId] => 123456
)
)
)
)
)
理想的结果
Array
(
[0]
(
[productID] => 9999
[productName] => Name
{productType] => Alpha
)
)
找到解决方案!
function miniArray($array, &$simple, $ii)
{
foreach($array as $key => $value)
{
if(is_array($value)){
$ii++;
miniArray($value, $simple, $ii);
}
else
{
$simple[$ii][$key] = $value;
}
}
}
miniArray($service, $simple_array, 0);
答案 0 :(得分:1)
<?php
function miniArray($array, &$simple)
{
foreach($array as $key => $value)
{
if(is_array($value))
miniArray($value, $simple);
else
$simple[] = $value;
}
}
miniArray($complex_array, $simple_array);
?>
答案 1 :(得分:1)
foreach
只会遍历数组的外层。在第一个循环中,$key
将是0
,$value
将是一个数组 - 永远不会匹配'Alpha'
。
你想要的是一个递归函数。 PHP为我们提供了一个很好的快捷方式array_walk_recursive,它允许您提供自己的函数,以递归方式应用于每个元素。
$list = array(); //your new array
function walker($value, $key) {
if ($value == 'Alpha') $list[] = $value;
}
array_walk_recursive($array, 'walker'); //$array is your original array