2017-04-06 103 views
0

这里是将遍历类的阵列,并且每个元件的content_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); 
    } 
} 

是否有一个更短,更具声明性的方式来实现这一目标?

+2

'$ jobsToProcessContentIds [] = $ job-> content_id;' – AbraCadaver

回答

0

PHP code demo

<?php 
class x 
{ 
    public $content_id="y"; 
} 
class y 
{ 
    public $content="z"; 
} 
$jobsToProcess=array(new x(), new y()); 


$jobsToProcessContentIds=array(); 
foreach ($jobsToProcess as $job) 
{ 
    if (property_exists($job, "content_id")) 
    { 
     $jobsToProcessContentIds[]=$job->content_id; 
    } 
} 
print_r($jobsToProcessContentIds); 

输出:

Array 
(
    [0] => y 
) 
+0

性能相同... –

0

这可能不是短得多,但它似乎是一个不错的选择。一个声明的方法是使用array_reduce()

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

两条线可以通过使用被保存在短路logical AND operator(即&&),尽管有些人会认为这是较少的可读性。

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

看到它在this phpfiddle中演示。