Что эквивалентно следующему (основанному в стиле JS) в PHP:
echo $post['story'] || $post['message'] || $post['name'];
Итак, если история существует, тогда опубликуйте это; или сообщение есть сообщение, которое и т.д.
Что эквивалентно следующему (основанному в стиле JS) в PHP:
echo $post['story'] || $post['message'] || $post['name'];
Итак, если история существует, тогда опубликуйте это; или сообщение есть сообщение, которое и т.д.
Это будет (PHP 5.3 +):
echo $post['story'] ?: $post['message'] ?: $post['name'];
И для PHP 7:
echo $post['story'] ?? $post['message'] ?? $post['name'];
Для этого есть однострочный, но он не совсем короче:
echo current(array_filter(array($post['story'], $post['message'], $post['name'])));
array_filter
вернет вам все ненулевые записи из списка альтернатив. И current
просто получает первую запись из отфильтрованного списка.
Поскольку оба or
и ||
не возвращают один из своих операндов, который невозможен.
Вы могли бы написать для него простую функцию:
function firstset() {
$args = func_get_args();
foreach($args as $arg) {
if($arg) return $arg;
}
return $args[-1];
}
Начиная с PHP 7, вы можете использовать оператор null коалесценции:
Нулевой коалесцирующий оператор (??) был добавлен в качестве синтаксического сахара для общего случая, когда нужно использовать тройной в сочетании с Исеть(). Он возвращает свой первый операнд, если он существует, и не является NULL; в противном случае он возвращает свой второй операнд.
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
Основываясь на ответе Адама, вы можете использовать оператор управления ошибками, чтобы помочь подавить ошибки, возникающие, когда переменные не установлены.
echo @$post['story'] ?: @$post['message'] ?: @$post['name'];
http://php.net/manual/en/language.operators.errorcontrol.php
Этот синтаксис будет эхо-1, если любой из них установлен, а не false, а 0, если нет.
Вот один способ сделать это, который работает и который может быть расширен для любого количества опций:
echo isset($post['story']) ? $post['story'] : isset($post['message']) ? $post['message'] : $post['name'];
... довольно уродливый. Изменить: Марио лучше меня, так как он уважает ваш выбранный произвольный порядок, как это делает, но в отличие от этого он не будет становиться все более уродливым с каждым новым вариантом, который вы добавляете.
Вы можете попробовать
<?php
echo array_shift(array_values(array_filter($post)));
?>
Потому что разнообразие - это пряность жизни:
echo key(array_intersect(array_flip($post), array('story', 'message', 'name')));