在没有foreach的情况下拆分数组

时间:2011-04-01 14:05:21

标签: php

我有一系列项目

 $arr1 = Array(266=>"foo",178=>"bar",3="foobar");

然后我有一个像这样的数字数组

 $arr2 = Array(0 => 266, 1 => 178);

所以我想要做的是将数组1分成两个数组

其中$ arr2与$ arr1索引匹配的值被移动到一个新数组,所以我留下了

 $arr1 = Array(3="foobar");

 $arr2= Array(266=>"foo",178=>"bar");

说我知道我可以用foreach循环来做这件事,但我想知道这是否是一种更简单,更快捷的方法

像array_diff这样的东西可以,但我不认为这会起作用

3 个答案:

答案 0 :(得分:2)

尝试:

$arr1 = array(266=>"foo",178=>"bar",3=>"foobar");
$arr2 = array(0 => 266, 1 => 178);

$tmp = array_diff_key ($arr1, array_flip($arr2));
$arr2 = array_diff($arr1,$tmp);
$arr1 = $tmp;

答案 1 :(得分:0)

$arr2=array_interest($arr1,array_flip($arr2));
$arr1=array_diff($arr1, $arr2);

答案 2 :(得分:0)

这应该做你想要的:

<?php
$arr1 = array( 
    266 => "foo",
    178 => "bar",
    3 => "foobar"
);

$arr2 = array(
    0 => 266,
    1 => 178
);

$foo = array_filter( 
    array_flip( $arr1 ),
    function( $key ) use ( $arr2 ) {
        return in_array( $key, $arr2 );
    }
);

var_dump( array_flip( $foo ) );

两个array_flip是因为array_filter只接受值,而不是键。实际上,我不太确定这是否比foreach更有效,但你必须进行测试。