11

PHPで1行として次のことが可能である場合はどうすればよいですか?:

<?php
$firstElement = functionThatReturnsAnArray()[0];

...それは「取る」ようには見えません。私はこれを2ステッパーとして行う必要があります:

<?php
$allElements = functionThatReturnsAnArray();
$firstElement = $allElements[0];

...ただ好奇心が強い-私が遊んでいる他の言語はこのようなことを許可します、そして私はPHPでこれを見逃すのが面倒です...どんな洞察も感謝しています...

4

17 に答える 17

9

@スコット・レイネン

それは真実ではない。これはうまくいきます:

list(,,$thirdElement) = $myArray;
于 2008-09-16T02:19:32.790 に答える
8

試す:

<?php
$firstElement = reset(functionThatReturnsAnArray());

配列の最初の要素を探しているだけの場合。

于 2008-09-16T02:02:30.820 に答える
6

残念ながら、それはPHPでは不可能です。あなたはそれをするために2行を使わなければなりません。

于 2008-09-16T01:57:41.097 に答える
5

これは1行で実行できます。array_shift()を使用します。

<?php

echo array_shift(i_return_an_array());

function i_return_an_array() {
    return array('foo', 'bar', 'baz');
}

これを実行すると、「foo」がエコーされます。

于 2008-09-16T04:03:45.520 に答える
3

ここではlist()が便利です。最初の配列要素以外では、役に立たない変数で埋める必要があります。例えば:

list( $firstElement ) = functionThatReturnsAnArray();
list( $firstElement , $secondElement ) = functionThatReturnsAnArray();

等々。

于 2008-09-16T02:15:51.490 に答える
1

どちらcurrent($array)array_shift($array)が機能するか、機能するか、前者はアレイをそのまま残します。

于 2008-09-16T07:34:38.320 に答える
1

私は実際にそのような目的のために書いた便利な関数を使用しています:

/**
 * 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');
于 2008-09-16T16:58:07.517 に答える
1

array_slice()次のように使用できます。

$elementX = array_slice(functionThatReturnsAnArray(), $x, 1);

end()言及されていないことにも気づきました。配列の最後の要素を返します。

于 2008-09-16T09:25:13.360 に答える
0

nickf、知っておくといい、ありがとう。残念ながら、これにはいくつかのコンマを超える読みやすさの問題があります。

于 2008-09-16T02:33:54.440 に答える
0

直接編集できないように聞こえるので、これは組み込み関数またはライブラリ関数だと思います。必要な出力を提供するラッパー関数を作成することをお勧めします。

function functionThatReturnsOneElement( $arg )
{
    $result = functionThatReturnsAnArray( $arg );
    return $result[0];
}
$firstElement = functionThatReturnsOneElement();
于 2008-11-18T15:41:36.287 に答える
0
$firstItem = current(returnsArray());
于 2008-09-16T14:28:45.033 に答える
0

さて、別の関数を呼び出さずに必要なものを取得する方法をいくつか見つけました。

$firstElement = ($t = functionThatReturnsAnArray()) ? $t[0] : false;

そして、あなたが使うことができる文字列のために

$string = (($t = functionThatReturnsAnArray())==0) . $t[0];

.. 興味深い問題

ドラコ

于 2008-09-16T08:19:24.690 に答える
0

上記のいずれも、何をしているのかを説明するコメントが必要で、2 行になると思います。私はそれがより簡単だと思います:

$element = functionThatReturnsArray();
$element = $element[0];

このように、余分な変数を使用していないため、何をしているのかが明確になります。

于 2008-09-16T13:55:33.133 に答える
-1

これが不可能であると私が知る限り、私はこれを何度か自分でやりたいと思っていました。

于 2008-09-16T01:57:59.910 に答える
-1

それが常に最初の要素である場合は、関数が配列の最初の項目だけを返すようにすることを検討する必要があります。それが最も一般的なケースである場合は、少しクールさを使用できます。

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は関数用です。

于 2008-09-16T02:39:51.963 に答える
-1

http://us3.php.net/reset

phpバージョン5でのみ使用できます。

于 2008-09-16T02:08:52.037 に答える
-1

場合によっては関数を変更して、オプションで配列全体ではなく要素を返すことができるようにします。

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);
于 2008-09-16T15:59:23.990 に答える