数组项匹配并分隔所有项

时间:2014-07-13 10:27:34

标签: php arrays

我有一个数组$info。我想从这个数组中创建两个数组。

Array
(
    [0] => Array
        (
            [ID] => 7
            [type] => general
            [description] => <p>One</p>
        )

    [1] => Array
        (
            [ID] => 8
            [type] => general
            [description] => <p>Two</p>
        )

    [2] => Array
        (
            [ID] => 9
            [type] => rules
            [description] => <p>One</p>
        )

)

我想从这个数组中创建两个数组。

如果任何数组项类型将是规则,那么这些数组项将转到一个数组,如果任何项类型将是通用的,那么这些数组项将转到另一个数组

我使用此功能但不起作用

    function myfunction($products, $needle)
    {
       foreach($products as $key => $product)
       {
          if ( $product['type'] === $needle )

                $a=array( );
                return $a=$product[];






       }

        return false;

    }

我的输出数组就是这个。我在两次调用我的函数。

$output = array(
                'status' => $status,
                'message' => $message,
                'rules'=>myfunction($info,'rules'),
                'general'=>myfunction($info,'general')

        );

我不知道出了什么问题

1 个答案:

答案 0 :(得分:0)

您的功能在与您的类型匹配的第一个项目后停止(请参阅return?)。其次,在if之后你缺少大括号(如果类型匹配,则只会初始化数组,但每次都会执行返回)。 return $a = $product[];也没有多大意义,我想它甚至可以编译。以下功能应按预期工作

function myfunction($products, $needle)
{
   $a = array();
   foreach($products as $key => $product)
   {
      if ( $product['type'] === $needle ) {
        $a[] = $product;
       }
   }

   return $a;
}

但是你不需要自己动作,PHP已经有array_filter函数:

$rules = array_filter($info, function($item) { return $item['type'] === 'rules'; });
$general = array_filter($info, function($item) { return $item['type'] === 'general'; });