tho*_*hom 46 php arrays indexing get numeric
我有一个像这样的数组:
$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
Run Code Online (Sandbox Code Playgroud)
因此,此本机函数将返回基于数字索引(第二个arg)的值,忽略关键字,查找数组中的实际位置.
是否有任何本机函数可以在PHP中执行此操作,还是应该编写它?谢谢
gen*_*sis 93
$array = array('foo' => 'bar', 33 => 'bin', 'lorem' => 'ipsum');
$array = array_values($array);
echo $array[0]; //bar
echo $array[1]; //bin
echo $array[2]; //ipsum
Run Code Online (Sandbox Code Playgroud)
Joh*_*ter 18
array_values()
会做你想做的事情:
$numeric_indexed_array = array_values($your_array);
// $numeric_indexed_array = array('bar', 'bin', 'ipsum');
print($numeric_indexed_array[0]); // bar
Run Code Online (Sandbox Code Playgroud)
我针对任何缺点array_values( )
函数提出了我的想法,因为我认为这不是一个直接的 get 函数。通过这种方式,它必须创建数值索引数组的副本,然后访问。如果 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;
}
Run Code Online (Sandbox Code Playgroud)
是的,对于标量值, implode和array_slice的组合就可以:
$bar = implode(array_slice($array, 0, 1));
$bin = implode(array_slice($array, 1, 1));
$ipsum = implode(array_slice($array, 2, 1));
Run Code Online (Sandbox Code Playgroud)
array_values
或者将其与and混合list
(感谢@nikic),以便它适用于所有类型的值:
list($bar) = array_values(array_slice($array, 0, 1));
Run Code Online (Sandbox Code Playgroud)