PHP - 使用数字索引获取数组值

问题描述 投票:0回答:5

我有一个像这样的数组:

$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 中是否有任何本机函数可以执行此操作,或者我应该编写它? 谢谢

php arrays get indexing numeric
5个回答
115
投票
$array = array('foo' => 'bar', 33 => 'bin', 'lorem' => 'ipsum');
$array = array_values($array);
echo $array[0]; //bar
echo $array[1]; //bin
echo $array[2]; //ipsum

21
投票

array_values()
几乎可以做你想做的事:

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

8
投票

我针对任何缺点

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;
}

6
投票

是的,对于标量值,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));

-1
投票

我们有原生函数可以做到这一点,它的调用

array_values

array_values
返回数组中的所有并以数字方式对数组进行索引。

工作原理如下:

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

查看 PHP 文档以获取更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.