2

配列を返す関数があるとします。

function return_me_an_array() {
  return array('my_value');
}

どうすればそれを呼び出して、エレガントな方法で配列から単一の値 (最初、最後、またはのみ) を取得できますか (はい、これが PHP であることはわかっています!)

私がこれをしたら

$var = reset(return_me_an_array());

次の PHP の厳密なエラーが発生します。

厳密な警告: 変数のみを参照渡しする必要があります

同様に、これらはそれぞれ同じ警告を出します。

$var = array_shift(return_me_an_array());
$var = array_pop(return_me_an_array());

私はこれを行うことができることを知っています:

$temp = return_me_an_array();
$var = $reset($temp);

しかし、それを 2 つのステートメントにわたって行わなければならないのは、かなり恐ろしいことです。

これを行う良い方法はありますか?

一見すると、これはHow to return an array and get the first element of it in one line in PHP? に似ています。しかし、受け入れられた答えは使用していますreset-だから、これは違うと思います; 厳密な警告を出さない解決策を探しているか、私が望んでいることは不可能だと言われます。

PHP 5.4 で配列の逆参照 (例: return_me_an_array()[0]) が導入されたことも認識していますが、残念ながら現在 5.3 を使用しています。

閉鎖後に編集: これはどのようにローカライズされすぎているのですか? これはエレガントな PHP の書き方に関する一般的な質問です。それとも、エレガントな PHP を気にかけている人がほとんどいないため、「インターネットの世界中の視聴者には一般的に当てはまらない非常に狭い状況」なのでしょうか?

4

4 に答える 4

5

これを使って:

$var = current(return_me_an_array());

デモ: http: //3v4l.org/Ruj5e

マニュアル: http: //php.net/manual/en/function.current.php

于 2012-10-26T09:34:26.137 に答える
1

その目的のために独自の配列メソッドを定義します。

function my_reset($array)
{
    return reset($array);
}

echo my_reset(return_me_an_array());

更新:

さらにエレガントな方法があります。Returning Referencesマニュアルを確認してください。

于 2012-10-26T09:40:25.947 に答える
0

わかりました、彼はエラーを抑制できませんか? それとも十分にエレガントではありませんか?

$var = @reset(return_me_an_array());

または、 https://stackoverflow.com/a/6726277/881551で共有されているように

$var = reset( ( return_me_an_array() ) );

本質的に求められている厳密な通知を回避する目的で、テスト済みで正常に動作します。

于 2012-10-26T15:59:58.910 に答える
0

これを使って:

$var = array_shift($var = return_me_an_array());

コードパッドへのリンク

于 2012-10-26T09:39:06.403 に答える