带键的array_pop()

时间:2011-08-03 21:16:32

标签: php arrays

考虑以下数组

$array = array('fruit'     => 'apple',
               'vegetable' => 'potato',
               'dairy'     => 'cheese');

我想使用array_pop来获取最后一个键/值对。

然而,人们会注意到以下

之后
$last = array_pop($array);

var_dump($last);

它只会输出值(string(6) "cheese"

如何从阵列“弹出”最后一对,保留键/值数组结构?

7 个答案:

答案 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()是真的很快)。这样,最后一个值也将被删除。