考虑以下数组
$array = array('fruit' => 'apple',
'vegetable' => 'potato',
'dairy' => 'cheese');
我想使用array_pop来获取最后一个键/值对。
然而,人们会注意到以下
之后$last = array_pop($array);
var_dump($last);
它只会输出值(string(6) "cheese"
)
如何从阵列“弹出”最后一对,保留键/值数组结构?
答案 0 :(得分:21)
结帐array_slice()
http://php.net/manual/en/function.array-slice.php
print_r(array_slice(array("a" => "1", "b" => 2, "c" => 3), -1, 1));
Array ( [c] => 3 )
答案 1 :(得分:10)
尝试
end($array); //pointer to end
each($array); //get pair
答案 2 :(得分:5)
您可以将end()
和key()
用于键和值,然后您可以弹出值。
$array = array('fruit' => 'apple', 'vegetable' => 'potato', 'dairy' => 'cheese');
$val = end($array); // 'cheese'
// Moves array pointer to end
$key = key($array); // 'dairy'
// Gets key at current array position
array_pop($array); // Removes the element
// Resets array pointer
答案 3 :(得分:2)
这应该可行,只是不要在foreach循环中执行它(它会弄乱循环)
end($array); // set the array pointer to the end
$keyvaluepair = each($array); // read the key/value
reset($array); // for good measure
编辑:Briedis建议array_slice()
这可能是一个更好的解决方案
答案 4 :(得分:0)
试试这个:
<?php
function array_end($array)
{
$val = end($array);
return array(array_search($val, $array) => $val);
}
$array = array(
'fruit' => 'apple',
'vegetable' => 'potato',
'dairy' => 'cheese'
);
echo "<pre>";
print_r(array_end($array));
?>
输出:
Array
(
[dairy] => cheese
)
答案 5 :(得分:0)
另一种选择:
<?php
end($array);
list($key, $value) = each($array);
array_pop($array);
var_dump($key, $value);
?>
答案 6 :(得分:0)
为什么不使用新功能?以下代码自PHP 7.3起可用:
// As simple as is!
$lastPair = [array_key_last($array) => array_pop($array)];
上面的代码简洁高效(如我测试的那样,对于具有10000个元素的数组,它比array_slice()
+ array_pop()
快20%;原因是array_key_last()
是真的很快)。这样,最后一个值也将被删除。