我有一个数组:

阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)

我想要得到这个数组的第一个元素。预期结果:串苹果

一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。

我该怎么做呢?


当前回答

这有点晚了,但我遇到了一个问题,我的数组包含数组元素作为其子元素,因此我不能获得第一个数组元素的字符串表示形式。通过使用PHP的current()函数,我管理了这个:

<?php
    $original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
    reset($original);  // to reset the internal array pointer...
    $first_element = current($original);  // get the current element...
?>

感谢所有当前的解决方案帮助我得到这个答案,我希望这能帮助到别人!

其他回答

没有人建议使用ArrayIterator类:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
$first_element = (new ArrayIterator($array))->current();
echo $first_element; //'apple'

绕过OP的参照规定。

原来的答案,但代价高昂(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];

使用array_keys()作为数字索引数组访问关联数组的键,然后可以再次将其用作数组的键。

当解为arr[0]时:

(注意,由于具有键的数组是基于0的索引,因此第1 元素是索引0)

你可以使用一个变量,然后减去1,得到你的逻辑,1 => 'apple'。

$i = 1;
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[$i-1]];

输出:

apple

为了简单起见,只需使用:

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[0]];

输出:

apple

通过第一种方法,不仅可以处理第一个元素,还可以像对待索引数组一样对待关联数组。

同样值得记住的是您执行此操作的上下文,因为详尽的检查可能是昂贵的,而且并不总是必要的。

例如,这个解决方案在我使用它的情况下工作得很好(但显然不能在所有情况下都依赖它……)

 /**
 * A quick and dirty way to determine whether the passed in array is associative or not, assuming that either:<br/>
 * <br/>
 * 1) All the keys are strings - i.e. associative<br/>
 * or<br/>
 * 2) All the keys are numeric - i.e. not associative<br/>
 *
 * @param array $objects
 * @return boolean
 */
private function isAssociativeArray(array $objects)
{
    // This isn't true in the general case, but it's a close enough (and quick) approximation for the context in
    // which we're using it.

    reset($objects);
    return count($objects) > 0 && is_string(key($objects));
}

你可以用一个语言结构"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);