PHP:関数によって返される配列の単一のメンバーを参照できますか?
質問
PHP で以下を 1 行で実行できるとしたら、どのようにすればよいでしょうか?:
<?php
$firstElement = functionThatReturnsAnArray()[0];
...「かかる」わけではないようです。これを 2 ステッパーとして行う必要があります。
<?php
$allElements = functionThatReturnsAnArray();
$firstElement = $allElements[0];
...ただ興味があるだけです - 私が使っている他の言語ではこのようなことができますが、私は怠け者なので PHP でこれを見逃すほどです...ご洞察をよろしくお願いいたします...
解決
試す:
<?php
$firstElement = reset(functionThatReturnsAnArray());
配列の最初の要素だけを探している場合。
他のヒント
@スコット・レイネン
それは真実ではない。これは機能します:
list(,,$thirdElement) = $myArray;
残念ながら、PHP ではそれは不可能です。これを行うには 2 行を使用する必要があります。
あなた できる これを一行でやってください!使用 配列シフト().
<?php
echo array_shift(i_return_an_array());
function i_return_an_array() {
return array('foo', 'bar', 'baz');
}
これを実行すると、「」がエコーされます。foo
".
ここでは list() が便利です。最初の配列要素以外では、無駄な変数を埋め込む必要があります。例えば:
list( $firstElement ) = functionThatReturnsAnArray();
list( $firstElement , $secondElement ) = functionThatReturnsAnArray();
等々。
私は実際にそのような目的のために作成した便利な関数を使用しています。
/**
* Grabs an element from an array using a key much like array_pop
*/
function array_key_value($array, $key) {
if(!empty($array) && array_key_exists($key, $array)) {
return $array[$key];
}
else {
return FALSE;
}
}
次に、次のように呼び出すだけです。
$result = array_key_value(getMeAnArray(), 'arrayKey');
使用できます array_slice()
, 、 そのようです:
$elementX = array_slice(functionThatReturnsAnArray(), $x, 1);
ということにも気づきました end()
については言及されていない。配列の最後の要素を返します。
どちらか current($array)
または array_shift($array)
機能します、前者は残ります 配列 無傷。
ニックフ、知ってよかった、ありがとう。残念ながら、コンマ数個を超えると読みやすさに問題があります。
上記のいずれも、何をしているのかを説明するコメントが必要になるため、2 行になると思います。私はそれを行う方が簡単だと思います:
$element = functionThatReturnsArray();
$element = $element[0];
こうすることで、余分な変数を使用することがなくなり、何をしているのかが明確になります。
$firstItem = current(returnsArray());
さて、別の関数を呼び出さずに必要なものを取得する方法をいくつか見つけました。
$firstElement = ($t = functionThatReturnsAnArray()) ? $t[0] : false;
そして使用できる文字列については
$string = (($t = functionThatReturnsAnArray())==0) . $t[0];
..興味深い問題
ドラコ
直接編集できないようなので、これは組み込み関数またはライブラリ関数だと思います。必要な出力を提供するラッパー関数を作成することをお勧めします。
function functionThatReturnsOneElement( $arg )
{
$result = functionThatReturnsAnArray( $arg );
return $result[0];
}
$firstElement = functionThatReturnsOneElement();
これが不可能であると知っている限り、私はこれを自分で何度かやりたいと思ってきました。
PHP バージョン 5 でのみ利用可能です。
それが常に最初の要素である場合は、関数が配列内の最初の要素だけを返すようにすることを検討する必要があります。これが最も一般的なケースである場合は、少し賢明な方法を使用できます。
function func($first = false) {
...
if $first return $array[0];
else return $array;
}
$array = func();
$item = func(true);
私のphpは少し錆びていますが、動作すると確信しています。
array_shift() と array_pop() も確認できます。
おそらくこれも可能です:
array(func())[0][i];
0 は機能を表します。
場合によっては、関数を変更して、オプションで配列全体ではなく要素を返せるようにします。
<?php
function functionThatReturnsAnArray($n = NULL) {
return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);