Как на php записать тернарную операцию с проверкой двух условий?

Есть пример как на JS пишется, как примерно также записать на PHP ?

// PHP
$output = '';
if ($value['status'] === 'ok') $output = 'step_1';
else if ($value['status'] === 'error') $output = 'step_2';

// JS
let output = (value.status === 'ok') ? 'step_1' : ((value.status === 'error') ? 'step_2' : '');

Ответы (1 шт):

Автор решения: Егор Банин

В php, если получать значение по несуществующему ключу массива, получим ошибку. Поэтому сперва:

$status = $value['status'] ?? 'undefined';

Далее, вам надо для разных статусов разные значения $output. Мне кажется, что нагляднее всего это сделать через match, switch или через ассоциативный массив:

$output = match($status) {
    'ok' => 'step_1',
    'error' => 'step_2',
    default => '',
};

или до php8:

$output = [
    'ok' => 'step_1',
    'error' => 'step_2',
][$status] ?? '';

Несколько тернарных операторов в одну строку — дурной тон. Это сложно читать и надо сидеть расплетать скобочки. Но в качестве упражнения можете написать:

$output = ($value['status'] ?? 'undefined') === 'ok' ? 'step_1' : (($value['status'] ?? 'undefined') === 'error' ? 'step_2' : '');
→ Ссылка