web-dev-qa-db-ja.com

PHP-数値インデックスで配列値を取得

私のような配列があります:

$array = array('foo' => 'bar', 33 => 'bin', 'lorem' => 'ipsum');
echo native_function($array, 0); // bar
echo native_function($array, 1); // bin
echo native_function($array, 2); // ipsum

したがって、このネイティブ関数は、数値インデックス(2番目の引数)に基づいて値を返し、assocキーを無視して、配列内の実際の位置を探します。

PHPでそれを行うネイティブ関数はありますか、それとも書くべきですか?ありがとう

45
thom
$array = array('foo' => 'bar', 33 => 'bin', 'lorem' => 'ipsum');
$array = array_values($array);
echo $array[0]; //bar
echo $array[1]; //bin
echo $array[2]; //ipsum
92
genesis

array_values() はあなたが望むことをほとんど行います:

$numeric_indexed_array = array_values($your_array);
// $numeric_indexed_array = array('bar', 'bin', 'ipsum');
print($numeric_indexed_array[0]); // bar
18
John Carter

私は、それが直接get関数ではないと思うので、不利なarray_values( )関数に対してそれについての私のアイデアを提案しています。この方法では、数値インデックス配列の値のコピーを作成してからアクセスする必要があります。 PHPが目的の要素の位置で整数を自動的に変換するメソッドを非表示にしない場合、わずかに優れたソリューションは、目的の位置、そして到達した要素を返します。

したがって、アルゴリズムは小さいサイズのインデックスを最もよく実行し、すぐに停止するため、作業はサイズの非常に大きな配列に対して最適化されます。ただし、array_values( )で強調表示されているソリューションでは、たとえば$ array [1]にアクセスする必要がある場合でも、配列全体を循環するサイクルに関係しています。

function array_get_by_index($index, $array) {

    $i=0;
    foreach ($array as $value) {
        if($i==$index) {
            return $value;
        }
        $i++;
    }
    // may be $index exceedes size of $array. In this case NULL is returned.
    return NULL;
}
4
and.ryx

はい、スカラー値の場合、 implodearray_slice の組み合わせは以下を行います:

$bar = implode(array_slice($array, 0, 1));
$bin = implode(array_slice($array, 1, 1));
$ipsum = implode(array_slice($array, 2, 1));

または、array_valuesおよびlist(@nikicに感謝)により、すべてのタイプの値で機能します。

list($bar) = array_values(array_slice($array, 0, 1));
4
netcoder