我有一个数组:
array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
我想要获取这个数组的第一个元素。期望结果是:string apple
一个要求:不能使用引用传递,因此array_shift
不是一个好的解决方案。
我该怎么做?
我有一个数组:
array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
我想要获取这个数组的第一个元素。期望结果是:string apple
一个要求:不能使用引用传递,因此array_shift
不是一个好的解决方案。
我该怎么做?
原回答,但代价高昂(O(n)):
array_shift(array_values($array));
array_pop(array_reverse($array));
其他用途等
如果修改(重置数组指针的意义下)$array
不是问题,您可以使用以下方法:
reset($array);
如果需要进行数组“复制”,这理论上应该更加高效:
array_shift(array_slice($array, 0, 1));
使用PHP 5.4+(但如果为空可能会导致索引错误):
array_values($array)[0];
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // Echoes "apple"
echo key($arr); // Echoes "4"
mixed reset ( array | object &$array );
描述:
reset()将数组的内部指针倒回到第一个元素,并返回第一个数组元素的值,如果数组为空,则返回FALSE。
foreach
循环中对该数组进行此操作,它将被破坏。 - Zenexerforeach
通常会复制它遍历的数组。 - Luke Cousinskey($arr)
,然后您将获得 '4'(添加到答案中)。 - lepe$first_value = reset($array); // First element's value
$first_key = key($array); // First element's key
reset()
将返回false
,如果您期望数组包含布尔值,则可能会导致错误。 - Jacobcurrent($array)
返回数组的第一个元素,根据PHP手册。
每个数组都有一个指向其“当前”元素的内部指针,该指针初始化为插入到数组中的第一个元素。
因此,它在您重新定位数组指针之前有效,否则您将不得不使用reset()
,它将倒回数组并返回数组的第一个元素
reset()将数组的内部指针倒回到第一个元素,并返回第一个数组元素的值。
current()
和reset()
的示例
$array = array('step one', 'step two', 'step three', 'step four');
// by default, the pointer is on the first element
echo current($array) . "<br />\n"; // "step one"
//Forward the array pointer and then reset it
// skip two steps
next($array);
next($array);
echo current($array) . "<br />\n"; // "step three"
// reset pointer, start again on step one
echo reset($array) . "<br />\n"; // "step one"
current($array)
才能起作用,否则需要使用reset($array)
。 - Joncurrent()
现在不再需要一个引用作为参数,尽管PHP文档没有反映这一点。因此我认为这已经成为了最佳解决方案。 - Ryanreset()
和current()
将返回false
,如果您期望数组包含bool
值,则可能会导致错误。 - Jacobreset()
。当嵌套函数时,例如current(array_column([],'key'))
,使用current()
。 - Jono$arr = $array = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'
如果您不想丢失当前指针位置,只需为数组创建一个别名。
reset()
已经返回了第一个元素,所以不需要使用 current()
-- echo reset($arr)
就足够了。 - Mikereset()
将返回false
,如果您期望数组包含bool
值,则可能会导致错误。 - JacobPHP 7.3 新增了两个函数,可以直接获取数组的第一个和最后一个键名,无需修改原始数组,也不需要创建任何临时对象:
除了语义上有意义外,这些函数甚至不会移动数组指针(就像foreach
一样)。
有了键名,就可以直接使用它们获取相应的值。
$my_array = ['IT', 'rules', 'the', 'world'];
$first_key = array_key_first($my_array);
$first_value = $my_array[$first_key];
$last_key = array_key_last($my_array);
$last_value = $my_array[$last_key];
$first_value = $my_array[ array_key_first($my_array) ];
$last_value = $my_array[ array_key_last($my_array) ];
$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];
$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];
$first_value = $my_array[array_key_first($my_array)] ?? null;
- Mitchell McKennaarray_first
。来获取第一个项目。还有可能是array_second
;) - PeterM// 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);
list($first_value) = $my_array;
在我看来,这是最好的选择。它没有其他答案中存在的问题:不会“过度设计”,因为它既不复制数组也不创建新数组。没有“引用”:数组不会被修改。没有“重置”:不会更改数组内部指针... - J. Bruniint
的情况,请尝试执行list($firstItem) = array('key1' => 'value1');
,你会收到一个错误提示Notice: Undefined offset: 0
。 - Marco DemaioPHP 5.4+:
array_values($array)[0];
$array_values = array_values($array); $value = $array_values[0];
PHP 4:$array_values = array_values($array); $value = $array_values[0];
- zdick假设:
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
只需使用:
$array[key($array)]
获取第一个元素或
key($array)
获取第一个键值。有些数组不能与像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;
}