Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从另一个数组创建一个数组数组,通过子数组的特定键对其进行过滤?_Php_Arrays_Filter - Fatal编程技术网

Php 如何从另一个数组创建一个数组数组,通过子数组的特定键对其进行过滤?

Php 如何从另一个数组创建一个数组数组,通过子数组的特定键对其进行过滤?,php,arrays,filter,Php,Arrays,Filter,我有以下数组: $array = [ [A,a,1,i], [B,b,2,ii], [C,c,3,iii], [D,d,4,iv], [E,e,5,v] ]; 从这个数组中,我想创建另一个数组,其中仅当每个子数组的第三个键的值大于3时才提取值 我这样想: if $array['2'] > 3){ $new_array[] = [$array['0'],$array['2'],$array['3']]; } 因此,最后我们将有以下新数组(注

我有以下数组:

$array = [
    [A,a,1,i],
    [B,b,2,ii],
    [C,c,3,iii],
    [D,d,4,iv],
    [E,e,5,v]
];
从这个数组中,我想创建另一个数组,其中仅当每个子数组的第三个键的值大于3时才提取值

我这样想:

if $array['2'] > 3){
    $new_array[] = [$array['0'],$array['2'],$array['3']];
}
因此,最后我们将有以下新数组(注意,子数组的第一个键在新数组中被消除):

一般来说,我认为应该用foreach制作,但由于我所描述的问题,我不知道如何才能做到这一点。以下是我尝试过的:

foreach($array as $value){
    foreach($value as $k => $v){
        if($k['2'] > 3){
            $new_array[] = [$v['0'], $v['2'], $v['3']];
        }
    }
}
但是可能有一个PHP的本地函数可以处理它,不是吗


非常感谢你的帮助

建议您使用
array\u map()
&
array\u filter()
。例如:

$array = [
    ['A','a',1,'i'],
    ['B','b',2,'ii'],
    ['C','c',3,'iii'],
    ['D','d',4,'iv'],
    ['E','e',5,'v']
];

$newArr = array_filter(array_map(function($v){ 
    if($v[2] > 3) return [$v[0], $v[2], $v[3]];
}, $array));

print '<pre>';
print_r($newArr);
print '</pre>';
$array=[
[A',A',1,'i'],
[B',B',2,'ii'],
[C',C',3',iii'],
[D',D',4',iv'],
['E','E',5,'v']
];
$newArr=数组\过滤器(数组\映射(函数($v){
如果($v[2]>3)返回[$v[0],$v[2],$v[3];
}($array));
打印“”;
印刷费($newArr);
打印“”;
参考:


在第一个foreach中,$v是要测试和复制的数组。 您希望测试$v[2],并检查它是否符合您的条件


要进行筛选,请使用
array\u filter
,要提取值
0、2、3
,请使用
array\u map
$array = [
    ['A','a',1,'i'],
    ['B','b',2,'ii'],
    ['C','c',3,'iii'],
    ['D','d',4,'iv'],
    ['E','e',5,'v']
];

$newArr = array_filter(array_map(function($v){ 
    if($v[2] > 3) return [$v[0], $v[2], $v[3]];
}, $array));

print '<pre>';
print_r($newArr);
print '</pre>';
$new_array = [];
foreach($array as $v) {
    if($v[2] > 3) {
        $new_array[] = [$v[0], $v[2], $v[3]];
    }
}