2017-04-06 105 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中演示。