我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。
我该怎么做呢?
我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。
我该怎么做呢?
当前回答
原来的答案,但代价高昂(O(n)):
array_shift(array_values($array));
在O (1):
array_pop(array_reverse($array));
其他用例,等等……
如果修改(在重置数组指针的意义上)$array不是一个问题,你可以使用:
reset($array);
如果需要数组“copy”,理论上这应该更有效:
array_shift(array_slice($array, 0, 1));
使用PHP 5.4+(但如果为空可能会导致索引错误):
array_values($array)[0];
其他回答
正如Mike指出的(最简单的方法):
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // Echoes "apple"
如果你想获取密钥:(重置后执行)
echo key($arr); // Echoes "4"
来自PHP的文档:
混合重置(数组|对象和$array);
描述:
reset()返回数组的内部指针指向第一个元素并返回第一个元素的值,如果数组为 空的。
这里有太多的答案,选择的答案将适用于大多数情况。
在我的例子中,我有一个2D数组,array_values出于某种奇怪的原因删除了内部数组上的键。所以我的结论是:
$keys = array_keys($myArray); // Fetches all the keys
$firstElement = $myArray[$keys[0]]; // Get the first element using first key
我认为使用array_values是最好的选择。你可以从函数的结果中返回下标0处的值,得到'apple'。
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
$arrayKeys = array_keys($myArray);
// The first element of your array is:
echo $myArray[$arrayKeys[0]];
有两个解决方案。
解决方案1 -使用钥匙。你没有说你不能用它。:)
<?php
// Get the first element of this array.
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
// Gets the first element by key
$result = $array[4];
// Expected result: string apple
assert('$result === "apple" /* Expected result: string apple. */');
?>
解决方案2 - array_flip() + key()
<?php
// Get first element of this array. Expected result: string apple
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
// Turn values to keys
$array = array_flip($array);
// You might thrown a reset in just to make sure
// that the array pointer is at the first element.
// Also, reset returns the first element.
// reset($myArray);
// Return the first key
$firstKey = key($array);
assert('$firstKey === "apple" /* Expected result: string apple. */');
?>
解决方案3 - array_keys()
echo $array[array_keys($array)[0]];