我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。
我该怎么做呢?
我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。
我该怎么做呢?
当前回答
我喜欢“列表”的例子,但是“列表”只适用于赋值的左边。如果我们不想赋值一个变量,我们将被迫创建一个临时名称,这在最好的情况下会污染我们的作用域,在最坏的情况下会覆盖现有的值:
list($x) = some_array();
var_dump($x);
上面的代码将覆盖$x的任何现有值,只要这个作用域是活动的,$x变量就会一直存在(函数/方法的结束,如果我们在顶层,则永远存在)。这可以使用call_user_func和一个匿名函数来解决,但它很笨拙:
var_dump(call_user_func(function($arr) { list($x) = $arr; return $x; },
some_array()));
如果我们使用这样的匿名函数,我们实际上可以避开reset和array_shift,即使它们使用引用传递。这是因为调用一个函数会绑定它的参数,这些参数可以通过引用传递:
var_dump(call_user_func(function($arr) { return reset($arr); },
array_values(some_array())));
然而,这实际上是多余的,因为call_user_func将在内部执行这个临时赋值。这让我们可以像处理值传递一样处理引用传递函数,没有任何警告或错误:
var_dump(call_user_func('reset', array_values(some_array())));
其他回答
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;
输出:
apple
查找数组中的第一个和最后一个项:
// Get the first item in the array
print $array[0]; // Prints 1
// Get the last item in the array
print end($array);
<?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
?>
Use:
$first = array_slice($array, 0, 1);
$val= $first[0];
默认情况下,array_slice不保留键,所以我们可以安全地使用0作为索引。
假设:
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
只使用:
$array[key($array)]
得到第一个元素或
key($array)
得到第一把钥匙。
如果你想删除第一个,你也可以取消它的链接。