是否有内置方法来检索PHP数组元素,以便从数组中删除它?

时间:2016-10-18 19:57:38

标签: php arrays

是否有内置方法来检索PHP数组元素,以便从数组中删除它?与array_pop()类似,但在特定索引上?例如:

<?php
$array = [
    'foo' => 123,
    'bar' => 456,
    'baz' => 789
];

$bar = array_get_and_remove($array, 'bar');

/* Outputs:
 * $bar = 456,
 * $array = ['foo' => 123, 'baz' => 789]
*/

2 个答案:

答案 0 :(得分:2)

没有一种内置方式的功能。当我推翻它时, Aammad Ullah 正确地对待它,但这是一个简单的方法。 $result将包含'bar' => 456,它将从$array中删除:

$array = array_diff_key($array, $result = ['bar' => $array['bar']]);
  • 'bar' => $array['bar']数组分配给$result
  • 计算数组与$result
  • 的差异

使用array_splice()

$result = array_splice($array, array_search('bar', array_keys($array), true), 1);
  • 获取字符串键array_keys()
  • 的数组
  • bar数组中搜索返回数字键/偏移array_search()
  • 的数组
  • 使用1的偏移量和长度删除该元素并将其返回array_splice()

要获得价值,请使用current()

$result = current(array_splice($array, array_search('bar', array_keys($array), true), 1));

答案 1 :(得分:2)

$element = $array[$key];
unset($array[$key]);

所以要使你的功能(一定要使用引用&):

function array_get_and_remove(&$array, $key);
    $element = $array[$key];
    unset($array[$key]);
    return $element;
}

然后:

$bar = array_get_and_remove($array, 'bar');