2016-10-18 32 views
2

是否有内置的方法来检索一个PHP数组元素,使其从数组中移除?类似于array_pop(),但在特定索引上?例如:有没有一种内置的方式来检索一个PHP数组元素,使它从数组中移除?

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

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

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

你可以用'array_splice()' – Rizier123

+3

http://php.net/array_splice –

+1

'array_splice()'只适用于数字索引? – reformed

回答

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'); 
+0

该死的,我推翻了我的! – AbraCadaver

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)); 
+0

我想你想使用'array_diff_key()',所以它根据不同的关键值得到差异。也没有'array_column()'解决方案?我很失望:P – Rizier123

+0

好点。只要价值是独一无二的,但它是可以编辑的,因为它可能不会。我可以做'array_column()',但没有多大意义;-) – AbraCadaver

相关问题