2017-07-31 45 views
0

我可以通过使用array_pop或array_shift从一个数组中移动一个项目,但这适用于字符串的开始或结尾。我期待从阵列拉的项,这是关键,所以:通过键从数组中拉出一个项目

$a = [ 
    'first' => '1st', 
    'second' => '2nd', 
    'third' => '3rd' 
]; 

$item = pull_by_key($a, 'second'); 
echo $item; 

输出将是(和$项目将被设置为)2nd所得阵列应该是:

[ 'first' => '1st', 'third' => '3rd' ] 

我可以用自定义功能做到这一点:

function pull_by_key(&$array, $key){ 
    $retval = $array[$key]; 
    unset($array[$key]); 
    return $retval; 
} 

...但我不知道是否有是这样做的功能。我找不到任何东西。

所以,要说清楚:我不只是想删除未设置的项目,我想从数组中拉出项目。因此,array_poparray_shift,但不是数组中的第一个或最后一个项目,而是项目的关键项目。

+1

不是重复......这不是从数组移除特定的元素,它是从一个数组拉,看看在功能上,这是拉项目(所以我知道它的内容),然后从阵列中删除它...在你投票结束之前阅读这个问题,请 – patrick

+0

@SebastianBrosch,对不起,但“但我想知道如果有是一个这样做的功能“从一开始就在那里......我不知道知道我可以多清楚一点。我的意思是,既然有一个'array_pop'和'array_shift',有一个'array_pop_by_key'就不足为奇了吧? – patrick

+1

你可以在这里找到所有数组函数的列表:http://php.net/manual/en/ref.array.php - 如果没有你搜索的函数,你必须创建自己的自定义函数。 –

回答

0

试试这个: -

$a = [ 
'first' => '1st', 
'second' => '2nd', 
'third' => '3rd' 
]; 

pull_by_key($a, 'second'); 
function pull_by_key(&$array, $key){ 
    $retval = $array[$key]; 
    unset($array[$key]); 
    return $retval; 
} 
echo "<pre>"; print_r($a); die; 
+0

老兄,这没有任何意义... $ a已经是必需的方式,print_r($ a)会显示出来。不需要把它放在新阵列中。 – patrick

+0

那么你的要求是什么? – kunal

+0

“我可以通过使用array_pop或array_shift从一个数组中移动一个项目,但是这对于字符串的开始或结束是有效的,我正在通过它的关键字从数组中拉出一个项目”.. ,我想知道是否有一个单一的命令... – patrick

0

定义一个临时数组$tempArray,推动内部$tempArray拉动项目:

<?php 

$a = [ 
    'first' => '1st', 
    'second' => '2nd', 
    'third' => '3rd' 
]; 

echo pull_by_key($a, 'second'); 

function pull_by_key(&$array, $key){ 
    $tempArray = []; 
    $tempArray[$key] = $array[$key]; 
    unset($array[$key]); 
    return $tempArray[$key]; 
} 
+0

米兰,谢谢,但要清楚:我的例子中的功能工作正常,它不必重复一个数组,我只是想知道如果有这样的命令,因为有一个从数组的开头或结尾拉取一个项目(array_pop和array_shift) – patrick

+1

那么,如果你没有设置它,而没有办法获得该值,那么发布执行'unset',除非你存储在一些变量中。国际海事组织,我不认为有任何内置的功能可以帮助您实现您的要求。 –

+0

我认为你是对的......没有单一的版本。我宁愿'复制'单个项目,而不是重复整个数组。但就像我说的:你是对的......没有一个单一的命令......我会把它作为一个功能请求:) – patrick

0

这正是PHP的array_splice()一样。我只需要首先搜索键的偏移量。为了防止由于尝试访问不存在的元素而导致的任何错误,条件statemeent是必需的。

代码:(Demo

$a = [ 
    'first' => '1st', 
    'second' => '2nd', 
    'third' => '3rd' 
]; 
$find_key='second'; 
if(($offset=array_search($find_key,array_keys($a)))!==false){ 
    $pulled=array_splice($a,$offset,1); 
    var_export($pulled); 
    echo "\n"; 
    var_export($a); 
}else{ 
    echo "$find_key not found"; 
} 

输出:

array (
    'second' => '2nd', 
) 
array (
    'first' => '1st', 
    'third' => '3rd', 
) 
相关问题