25

PHPの以下(JSスタイルに基づく)に相当するものは何ですか?

echo $post['story'] || $post['message'] || $post['name'];

したがって、ストーリーが存在する場合は、それを投稿してください。または、メッセージが存在する場合は、それを投稿するなど...

4

8 に答える 8

42

それは(PHP 5.3+)になります:

echo $post['story'] ?: $post['message'] ?: $post['name'];

そしてPHP7の場合:

echo $post['story'] ?? $post['message'] ?? $post['name'];
于 2013-07-05T07:26:45.830 に答える
17

そのためのワンライナーがありますが、それは正確に短くはありません:

echo current(array_filter(array($post['story'], $post['message'], $post['name'])));

array_filter選択肢のリストからnull以外のすべてのエントリを返します。そしてcurrent、フィルタリングされたリストから最初のエントリを取得します。

于 2011-11-20T18:52:22.773 に答える
6

orとの両方||がそれらのオペランドの1つを返さないので、それは不可能です。

ただし、そのための簡単な関数を書くことができます。

function firstset() {
    $args = func_get_args();
    foreach($args as $arg) {
        if($arg) return $arg;
    }
    return $args[-1];
}
于 2011-11-20T18:46:48.667 に答える
5

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';
于 2016-02-25T08:53:32.610 に答える
5

Adamの答えに基づいて、エラー制御演算子を使用して、変数が設定されていないときに生成されるエラーを抑制することができます。

echo @$post['story'] ?: @$post['message'] ?: @$post['name'];

http://php.net/manual/en/language.operators.errorcontrol.php

于 2016-03-10T23:22:41.237 に答える
1

その構文は、これらのいずれかが設定されていてfalseでない場合は1をエコーし​​、設定されていない場合は0をエコーし​​ます。

これを行う1行の方法は次のとおりです。これは機能し、任意の数のオプションに拡張できます。

    echo isset($post['story']) ? $post['story'] : isset($post['message']) ? $post['message'] : $post['name'];

...かなり醜いです。編集:マリオは、このように選択した任意の順序を尊重するため、私のものよりも優れていますが、これとは異なり、新しいオプションを追加するたびに醜くなり続けることはありません。

于 2011-11-20T18:55:08.900 に答える
1

あなたはそれを試すことができます

<?php
    echo array_shift(array_values(array_filter($post)));
?>
于 2011-11-20T19:03:18.600 に答える
1

多様性は人生のスパイスであるため:

echo key(array_intersect(array_flip($post), array('story', 'message', 'name')));
于 2011-11-21T01:21:30.730 に答える