Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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_Functional Programming_Iteration_Declarative - Fatal编程技术网

Php 迭代类数组并将某些属性推入数组

Php 迭代类数组并将某些属性推入数组,php,functional-programming,iteration,declarative,Php,Functional Programming,Iteration,Declarative,下面的代码将迭代类数组,并将每个元素(如果存在)的content\u id属性推送到数组中: # Collect content jobs ids from the job to process $jobsToProcessContentIds = []; foreach ( $jobsToProcess as $job ) { if ( $job->content_id ?? null ) { array_push( $jobsToProcessContentId

下面的代码将迭代类数组,并将每个元素(如果存在)的
content\u id
属性推送到数组中:

# Collect content jobs ids from the job to process
$jobsToProcessContentIds = [];
foreach ( $jobsToProcess as $job ) {
    if ( $job->content_id ?? null ) {
        array_push( $jobsToProcessContentIds, $job->content_id );
    }
}
有没有一种更简短、更具说明性的方法来实现这一点?


这可能不会短得多,但使用声明式方法似乎是一个不错的选择

使用短路(即
&&&
)可以节省两行代码,尽管有些人认为它可读性较差

$jobsToProcessContentIds = array_reduce($jobsToProcess, function($carry, $job) {
    ($job->content_id ?? null) && $carry[] = $job->content_id;
    return $carry;
});

请参见中的演示。

$jobsToProcessContentIds[]=$job->content\u id
Array
(
    [0] => y
)
$jobsToProcessContentIds = array_reduce($jobsToProcess, function($carry, $job) {
    if ($job->content_id ?? null) {
        $carry[] = $job->content_id;
    }
    return $carry;
});
$jobsToProcessContentIds = array_reduce($jobsToProcess, function($carry, $job) {
    ($job->content_id ?? null) && $carry[] = $job->content_id;
    return $carry;
});