Судя по всему, вы пытаетесь разделить вещи, которые являются обязательными или необязательными, в разные массивы.
<?php
foreach ( $things as $thing )
{
if ( $thing->required )
$required[] = $thing;
else
$optional[] = $thing;
}
Если вы настаиваете на том, чтобы сделать это в одной строке, вы можете сделать это:
<?php
foreach ( $things as $thing )
${$thing->required ? 'required' : 'optional'}[] = $thing;
Проблема с вашим кодом $list =& $thing->required ? $required : $optional;
. PHP игнорирует часть ? $required : $optional
и присваивает $ this-> required для $list
. Когда вы пытаетесь добавить в массив следующий код, $list
является скаляром, а не массивом, поэтому он не работает. Единственный способ решить эту проблему - использовать одно из приведенных выше решений или создать функцию, возвращающую массив по ссылке.
Ссылка : От http://php.net/manual/en/language.operators.comparison.php:
Обратите внимание, что троичный оператор
это утверждение, и что оно не
оценить переменную, но к
результат заявления. Это
важно знать, если вы хотите
вернуть переменную по ссылке.
оператор return $ var == 42? $ a: $ b;
в функции возврата по ссылке будет
поэтому не работает и предупреждение
выпущено в более поздних версиях PHP.