我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。
我该怎么做呢?
我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。
我该怎么做呢?
当前回答
一些数组不能与list、reset或current等函数一起使用。也许它们是“人造”数组——例如,部分实现了ArrayIterator。
如果你想拉出第一个值而不考虑数组,你可以短路迭代器:
foreach($array_with_unknown_keys as $value) break;
然后你的值将在$value中可用,循环将在第一次迭代后中断。这比将一个潜在的大数组复制到array_unshift(array_values($arr))这样的函数更有效。
你也可以用这种方式获取钥匙:
foreach($array_with_unknown_keys as $key=>$value) break;
如果你从函数中调用这个函数,只要提前返回:
function grab_first($arr) {
foreach($arr as $value) return $value;
}
其他回答
<?php
$arr = array(3 => "Apple", 5 => "Ball", 11 => "Cat");
echo array_values($arr)[0]; // Outputs: Apple
?>
其他的例子:
<?php
$arr = array(3 => "Apple", 5 => "Ball", 11 => "Cat");
echo current($arr); // Outputs: Apple
echo reset($arr); // Outputs: Apple
echo next($arr); // Outputs: Ball
echo current($arr); // Outputs: Ball
echo reset($arr); // Outputs: Apple
?>
只是做的事:
array_shift(array_slice($array,0,1));
我想象作者只是在寻找一种方法来获得一个数组的第一个元素后,从一些函数(mysql_fetch_row,例如),而不生成一个严格的“只有变量应该通过引用传递”。
如果是这样的话,这里描述的几乎所有方法都会得到这个消息…其中一些会使用大量额外的内存来复制一个数组(或其中的一部分)。避免它的一个简单方法是在调用任何这些函数之前内联赋值:
$first_item_of_array = current($tmp_arr = mysql_fetch_row(...));
// or
$first_item_of_array = reset($tmp_arr = func_get_my_huge_array());
这样就不会在屏幕上看到STRICT消息,也不会在日志中看到STRICT消息,也不会创建任何额外的数组。它既适用于索引数组,也适用于关联数组。
查找数组中的第一个和最后一个项:
// Get the first item in the array
print $array[0]; // Prints 1
// Get the last item in the array
print end($array);
你可以用一个语言结构"list"得到第n个元素:
// First item
list($firstItem) = $yourArray;
// First item from an array that is returned from a function
list($firstItem) = functionThatReturnsArray();
// Second item
list( , $secondItem) = $yourArray;
使用array_keys函数,你可以对键做同样的事情:
list($firstKey) = array_keys($yourArray);
list(, $secondKey) = array_keys($yourArray);