PHPの以下(JSスタイルに基づく)に相当するものは何ですか?
echo $post['story'] || $post['message'] || $post['name'];
したがって、ストーリーが存在する場合は、それを投稿してください。または、メッセージが存在する場合は、それを投稿するなど...
PHPの以下(JSスタイルに基づく)に相当するものは何ですか?
echo $post['story'] || $post['message'] || $post['name'];
したがって、ストーリーが存在する場合は、それを投稿してください。または、メッセージが存在する場合は、それを投稿するなど...
それは(PHP 5.3+)になります:
echo $post['story'] ?: $post['message'] ?: $post['name'];
そしてPHP7の場合:
echo $post['story'] ?? $post['message'] ?? $post['name'];
そのためのワンライナーがありますが、それは正確に短くはありません:
echo current(array_filter(array($post['story'], $post['message'], $post['name'])));
array_filter
選択肢のリストからnull以外のすべてのエントリを返します。そしてcurrent
、フィルタリングされたリストから最初のエントリを取得します。
or
との両方||
がそれらのオペランドの1つを返さないので、それは不可能です。
ただし、そのための簡単な関数を書くことができます。
function firstset() {
$args = func_get_args();
foreach($args as $arg) {
if($arg) return $arg;
}
return $args[-1];
}
PHP 7以降、 null合体演算子を使用できます。
null合体演算子(??)は、isset()と組み合わせて三項演算子を使用する必要がある一般的なケースの構文糖衣として追加されました。存在し、NULLでない場合は、最初のオペランドを返します。それ以外の場合は、2番目のオペランドを返します。
// 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';
Adamの答えに基づいて、エラー制御演算子を使用して、変数が設定されていないときに生成されるエラーを抑制することができます。
echo @$post['story'] ?: @$post['message'] ?: @$post['name'];
http://php.net/manual/en/language.operators.errorcontrol.php
その構文は、これらのいずれかが設定されていてfalseでない場合は1をエコーし、設定されていない場合は0をエコーします。
これを行う1行の方法は次のとおりです。これは機能し、任意の数のオプションに拡張できます。
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')));