PHP如何过滤多维数组

时间:2017-11-08 15:19:16

标签: php arrays array-filter

我有一个想要验证的多维数组

$new = [];
$old = [
        [
        'name'=>'ben',
        'age'=>20,
        ],
        [
        'name'=>'ben',
        'age'=>20,
        ],
        [
        'name'=>'ben',
        'age'=>##,
        ],

]

我想将$ old数组中值等于“##”的任何子数组移动到$ new数组,因此结果如下:

$old = [
        [
        'name'=>'ben',
        'age'=>20,
        ],
        [
        'name'=>'ben',
        'age'=>20,
        ],

];
$new = [
            [
            'name'=>'ben',
            'age'=>##,
            ],

    ]

我尝试过filter_arry和in_array但没有成功

3 个答案:

答案 0 :(得分:2)

只需使用foreach循环。

  

foreach构造提供了一种迭代数组的简单方法。   foreach仅适用于数组和对象,并在发生时发出错误   您尝试在具有不同数据类型或变量的变量上使用它   未初始化的变量。

     

有两种语法:

     
      
  • foreach (array_expression as $value)
  •   
  • foreach (array_expression as $key => $value)
  •   
     

第一个表单循环遍历array_expression给出的数组。在每次迭代时,当前元素的值   被分配给$ value,内部数组指针被提前   一个(所以在下一次迭代中,你将看到下一个元素)。

     

第二种形式还会分配当前元素的键   每次迭代时的$ key变量。

示例:

<?php
$new = [];
foreach ($old as $k => $v) {
    if ($v['age'] == '##') {
        $new[] = $v;
        unset($old[$k]);
    }
}

答案 1 :(得分:0)

将PHP的array_filter函数与回调一起使用:

$new_arr = array_filter($old, function ($old) {
    return ($old['age'] == '##');
});

$old_arr = array_filter($old, function ($old) {
    return ($old['age'] != '##');
});

print_r($new_arr);
print_r($old_arr);

答案 2 :(得分:0)

这很有效。

$new[] = array();
$old = array(

            array('name'=>'ben','age'=>'20'),
            array('name'=>'ben','age'=>'40'),
            array('name'=>'ben','age'=>'##')


       );


foreach( $old as $array ){

//print_r( $array );
        if( $array['age'] == "##" ){

                $new[] = $array['name'];
                $new[] = $array['age'];

                unset($array['name']);
                unset($array['age']);

        }

        //print_r( $array );
        print_r( $new);
}