使用foreach搜索php数组以获取特定值

时间:2012-11-05 18:21:14

标签: php multidimensional-array foreach

我似乎无法从以下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);

2 个答案:

答案 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