Подтвердить что ты не робот

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

Итак, эта встроенная функция вернет значение на основе числового индекса (второй аргумент), игнорируя ключи-помощники, ища реальную позицию в массиве.

Есть ли какая-либо нативная функция для PHP, или я должен ее написать? Благодаря

4b9b3361

Ответ 1

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

Ответ 2

array_values() будет делать в значительной степени то, что вы хотите:

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

Ответ 3

Да, для скалярных значений комбинация implode и array_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

Я предлагаю свое представление об этом против любых недостатков 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;
}