在PHP 7.4中,我具有与objets的关联数组:
$array = [
1 => Class {
'id' => 1,
'call' => true,
},
5 => Class {
'id' => 5,
'call' => false,
},
7 => Class {
'id' => 7,
'call' => true,
},
]
如果call
属性=== true
,我想提取所有ID。
搜索后,我认为我应该使用array_map
函数。
$ids = array_map(function($e) {
if (true === $e->call) {
return $e->id;
}
}, $array);
// Return :
array(3) {
[1]=> 1
[5]=> NULL
[7]=> 7
}
但是我有两个问题:
NULL
个结果array
中加入关联密钥。我想要一个新数组([0=>1, 1=>7]
)我知道我可以使用foreach()
来做到这一点,但是我发现使用单个PHP函数(array_walk
或array_map
吗?)很有趣
答案 0 :(得分:1)
您可能希望array_filter
过滤掉不需要的内容,然后可以提取id
:
$ids = array_column(array_filter($array, function($e) {
return $e->call === true;
}), 'id');
答案 1 :(得分:1)
创建一个数组,该数组是由call
索引的id
值,然后对其进行过滤。由于id是索引,因此请提取id的密钥...
$ids = array_keys(array_filter(array_column($array, "call", "id")));
print_r($ids));
Array
(
[0] => 1
[1] => 7
)
尽管我认为foreach()
是更直接的方法。
答案 2 :(得分:0)
您可以reduce使用带有回调的数组,该回调有条件地将每个项目的ID添加到“携带”数组中。
$ids = array_reduce($array, fn($c, $i) => $i->call ? [...$c, $i->id] : $c, []);