带键的array_pop()

Ste*_*ins 24 php arrays

考虑以下数组

$array = array('fruit'     => 'apple',
               'vegetable' => 'potato',
               'dairy'     => 'cheese');
Run Code Online (Sandbox Code Playgroud)

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

但是,人们会注意到以下之后

$last = array_pop($array);

var_dump($last);
Run Code Online (Sandbox Code Playgroud)

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

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

Mār*_*dis 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));
Run Code Online (Sandbox Code Playgroud)
Array
(
    [c] => 3
)
Run Code Online (Sandbox Code Playgroud)

  • 如果您的密钥是数字的,或者您可能无法获得预期的对,请确保设置preserve_keys = true! (2认同)
  • 这会起作用,但是执行三重内联语句,因为示例可能会让新手感到困惑,绝对不建议在代码中使用该部分。 (2认同)

Ria*_*iaD 10

尝试

end($array); //pointer to end
each($array); //get pair
Run Code Online (Sandbox Code Playgroud)

  • 注意:`each()` 从 PHP 7.2.0 开始被弃用(评论时的当前次要版本。) (4认同)

MAC*_*rha 7

为什么不使用新功能?从 PHP 7.3 开始,以下代码有效:

// As simple as is!
$lastPair = [array_key_last($array) => array_pop($array)];
Run Code Online (Sandbox Code Playgroud)

上面的代码简洁高效(据我测试,对于具有 10000 个元素的数组,它比array_slice()+快大约 20% array_pop();原因是它array_key_last()确实很快)。这样最后一个值也将被删除。

提示:您还可以分别提取键和值:

[$key, $value] = [array_key_last($array), array_pop($array)];
Run Code Online (Sandbox Code Playgroud)


Roc*_*mat 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
Run Code Online (Sandbox Code Playgroud)