在PHP中,假设有一个关联数组S,我需要检索并提取出其中的第一个元素,包括其键和值。
我会使用
value1=array_pop(S);
但是它只给我值。
我可以使用
K=array_keys(S);
key1=array_pop(K);
value1=array_pop(S);
但它很复杂,因为需要有两个相同数据的副本。这很令人困惑,因为该数组本身是一个数组中的元素。一定有更加优雅的方法来提取读取键/值对。
在PHP中,假设有一个关联数组S,我需要检索并提取出其中的第一个元素,包括其键和值。
我会使用
value1=array_pop(S);
但是它只给我值。
我可以使用
K=array_keys(S);
key1=array_pop(K);
value1=array_pop(S);
但它很复杂,因为需要有两个相同数据的副本。这很令人困惑,因为该数组本身是一个数组中的元素。一定有更加优雅的方法来提取读取键/值对。
// first
$value = reset($arr);
$key = key($arr);
reset()
PHP手册,
key()
PHP手册。unset($arr[$key]); # in case you want to remove it.
array_pop()
PHP手册是用于操作最后一个元素的。// last
$value = end($arr);
$key = key($arr);
unset($arr[$key]); # in case you want to remove it.
end()
PHP手册。
[$value, $key] = [reset($arr), key($arr)]; // first
[$value, $key] = [end($arr), key($arr)]; // last
(PHP 7.1+)
或者
list($value, $key) = array(reset($arr), key($arr)); // first
list($value, $key) = array(end($arr), key($arr)); // last
(PHP 4.3+)
或者
extract(array('value' => reset($arr), 'key' => key($arr))); // first
extract(array('value' => end($arr), 'key' => key($arr))); // last
(PHP 4.3+; 注意:extract() 正在使用!)
或者
// first
reset($arr);
list($key, $value) = each($arr);
// last
end($arr);
list($key, $value) = each($arr);
// first
for ($key = null, $value = null; false !== $_ = reset($arr);)
{
$value = $_;
unset($arr[$key = key($arr)]);
break;
}
unset($_);
// last
for ($key = null, $value = null; false !== $_ = end($arr);)
{
$value = $_;
unset($arr[$key = key($arr)]);
break;
}
unset($_);
$arr = array('first' => '1st', 'last' => '2nd.');
:string(4) "2nd." # value
string(4) "last" # key
array(1) { # leftover array
["first"]=>
string(3) "1st"
}
bool(false) # value
NULL # key
array(0) { # leftover array
}
// first
reset($arr);
$key = key($arr);
$value = array_pop($arr);
// last
end($arr);
$key = key($arr);
$value = array_pop($arr);
$value = end($arr);
而不是 $value = reset($arr);
来回答这个问题! - Alex Barkerarray_pop
是用于最后一个元素,这应该强调一下OP可能存在的混淆,因为在伪代码/示例代码中有array_pop()
,但在句子中使用了“[...]我需要检索和提取第一个元素,包括值和键。”-请参见我的原始评论。 - hakre$arr = array('k1' => 'v1', 'k2' => 'v2', 'k3' => 'v3');
$a = array_slice($arr, 0, 1);
var_dump($a);
$arr = array_slice($arr, 1);
var_dump($arr);
array(1) {
["k1"]=>
string(2) "v1"
}
array(2) {
["k2"]=>
string(2) "v2"
["k3"]=>
string(2) "v3"
}
array_slice()
是一个很好的想法。根据要对键和值做什么操作,可以使用以下代码:list($key, $value) = array_slice($arr, 0, 1);
- KingCruncharray_slice()
速度相对较慢,不是吗?我的意思是这是一个很好的函数,但就弹出数组末尾而言... - hakre$value = reset($array);
$key = key($array);
编辑:Hakre刚刚比我快了一步 :-)
list($value, $key) = array(reset($s), key($s));
array_shift($s); // or just unset($s[$key]);
reset()
的作用), - KingCrunch我在类似的情况下做了以下事情:
$last_index = count($test_array)-1;
if($last_index >= 0) {
$last_key = array_keys($test_array)[$last_index];
foreach($test_array as $k => $v) {
if($k == $last_key)
echo "last: ";
echo $k . '=' . $v . PHP_EOL;
}
}
尽管我最终使用的解决方案是 while 循环(我实际上不需要保留键),但我基本上是试图将数组元素放在 pdf 的一个区域上,通过将多个元素放在同一行上来实现。我使用了 array_chunk() 将数组分成每个子数组 5 个或更少的子数组,然后使用 while(count($chunks) > 0) {}
移动结果数组。这篇文章中的一些解决方案也可以类似地在 while 循环中移动/取消设置数组元素,直到数组为空。