50

PHPでは、配列を使用して変数をマップする必要があることがよくあります...しかし、これを1つのライナーで行うことはできないようです。例を参照してください:

// the following results in an error:
echo array('a','b','c')[$key];

// this works, using an unnecessary variable:
$variable = array('a','b','c');
echo $variable[$key];

これは小さな問題ですが、たまにバグが発生し続けます...変数を無料で使用するという事実は好きではありません;)

4

9 に答える 9

40

技術的な答えは、PHP 言語のGrammarでは、変数式の末尾の添え字表記のみが許可されており、一般的なでは許可されていないということです。これは、他のほとんどの言語で機能する方法です。どんな表現に対しても添え字を明確に解決する文法を持つことができるので、私はいつもそれを言語の欠陥と見なしてきました。ただし、柔軟性のないパーサー ジェネレーターを使用している場合や、何らかの下位互換性を壊したくない場合があります。

有効な式に対する無効な添え字の例をさらにいくつか示します。

$x = array(1,2,3);
print ($x)[1]; //illegal, on a parenthetical expression, not a variable exp.

function ret($foo) { return $foo; }
echo ret($x)[1]; // illegal, on a call expression, not a variable exp.
于 2008-08-28T09:58:36.653 に答える
23

これは、配列の逆参照と呼ばれます。php5.4で追加されました。 http://www.php.net/releases/NEWS_5_4_0_alpha1.txt

update [2012-11-25]: PHP 5.5以降、配列だけでなく定数/文字列にも間接参照が追加されました

于 2011-10-25T11:28:48.267 に答える
19

本当に、その余分な変数については気にしません。ただし、必要に応じて、使用後にメモリから削除することもできます。

$variable = array('a','b','c');
echo $variable[$key];
unset($variable);

または、小さな関数を書くこともできます。

function indexonce(&$ar, $index) {
  return $ar[$index];
}

そしてこれを次のように呼びます:

$something = indexonce(array('a', 'b', 'c'), 2);

これで、アレイは自動的に破棄されます。

于 2008-08-16T12:55:29.953 に答える
6

これは直接関係ないかもしれません..しかし、私はこの投稿に来て、この特定の問題の解決策を見つけました。

次の形式の関数から結果を取得しました。

Array
(
    [School] => Array
            (
                [parent_id] => 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a
            )
)

私が欲しかったのはparent_idの値「9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a」でした。このような機能を使用して取得しました。

array_pop( array_pop( the_function_which_returned_the_above_array() ) )

だから、それは一行で行われました:)それが誰かに役立つことを願っています.

于 2011-12-23T07:36:14.593 に答える
2
function doSomething()
{
    return $somearray;
}

echo doSomething()->get(1)->getOtherPropertyIfThisIsAnObject();
于 2011-02-18T10:40:42.493 に答える
1

実際には、洗練された解決策があります:) 次は、myfunc によって返された配列の 3 番目の要素を $myvar に割り当てます。

$myvar = array_shift(array_splice(myfunc(),2));
于 2010-05-26T11:50:04.483 に答える