Перебирать массив классов и помещать определенные свойства в массив

Вот код, который будет перебирать массив классов и выдвигать 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 );
}
}

Есть ли более короткий, более декларативный способ добиться этого?

0

Решение

Демонстрация кода PHP

<?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

Другие решения

Это может быть не намного короче, но, кажется, хорошим выбором для декларативного подхода является использование array_reduce ().

$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;
});

Увидеть это продемонстрировано в это phpfiddle.

0

По вопросам рекламы [email protected]