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
所以,这个本地函数将返回一个基于数字索引(第二个参数)的值,忽略关联键,查找数组中的实际位置。
有没有任何原生function在PHP中做,或者我应该写吗? 谢谢
$array = array('foo' => 'bar', 33 => 'bin', 'lorem' => 'ipsum'); $array = array_values($array); echo $array[0]; //bar echo $array[1]; //bin echo $array[2]; //ipsum
array_values()
会做几乎你想要的:
$numeric_indexed_array = array_values($your_array); // $numeric_indexed_array = array('bar', 'bin', 'ipsum'); print($numeric_indexed_array[0]); // bar
是的,对于标量值, 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)混合起来,以便它可以处理所有types的值:
list($bar) = array_values(array_slice($array, 0, 1));
我提出我的想法反对任何缺点array_values( )
函数,因为我认为这不是一个直接的get函数。 通过这种方式,它必须创build数值索引数组的值的副本,然后访问。 如果PHP不隐藏自动翻译所需元素位置的整数的方法,也许稍微好一点的解决scheme可能包括一个函数,该函数用计数器运行数组,直到它到达所需的位置,然后返回到达的元素。
所以这项工作将会针对非常大的尺寸进行优化,因为这个algorithm对于小的performance是最好的指标,立即停下来。 然而,在array_values( )
突出显示的解决scheme中,它必须处理整个数组中的一个循环,即使例如我必须访问$ 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; }