2012-12-26 25 views
2

我写这似乎是一个共同的任务的功能,我一直在寻找通过PHP文件并不能找到这个功能是否有我想要实现的本机功能?

/** 
* Move certain key/values from an array to a new one 
* @param array $array the original array 
* @param array $keys 
* @return $array 
*/ 
function array_rip(array &$array, array $keys){ 
    $new = array(); 
    foreach($keys as $key){ 
     if(isset($array[$key])){ 
      $new[$key] = $array[$key]; 
      unset($array[$key]); 
     } 
    } 
    return $new; 
} 

是否已有这样的功能,我只是错过显而易见的?

这是行为

<?php 
$a = array('color'=>'green', 'fruit'=>'apple','item_id'=>33,'owner_id'=>420); 
$b = array_rip($a,array('owner_id','item_id')); 

print_r($a); 
print_r($b); 
?> 

上面的示例将输出:使用array_combine()

Array 
(
    [color] => green 
    [fruit] => apple 
) 

Array 
(
    [owner_id] => 420 
    [item_id] => 33 
) 
+0

不是我所知道的,但你可以看看文档,类似这个最接近的东西是http://php.net/manual/en/function.array-combine.php,但是密钥数量必须相等。 –

回答

0

尝试。

$array = array_combine(array_keys($array1), array_values($array2)); 
+0

'array_combine()'要求两个数组具有相同数量的项目,否则会出现错误“两个参数应具有相同数量的元素”。另外,OP只想保留与包含在第二个数组中的值相匹配的键。 – kiamlaluno

0

有没有这样的功能,但你可以尝试用下面的代码

$arr1 = array('one' => 'one_v', 'two' => 'two_v', 'three' => 'three_v'); 
$arr2 = array('one', 'three'); 

// flip, so keys become values 
$arr1_flipped = array_flip($arr1); 

array_flip(array_diff($arr1_flipped, $arr2)); // returns Array([two] => two_v) 

array_flip(array_intersect($arr1_flipped, $arr2)) // returns Array ([one] => one_v [three] => three_v) 
0

如果您使用数组翻转功能像什么@Artem大号建议你可以达到你想要什么,但能够取得什么它会花费一点额外的处理时间,因为它调用array_flip 3次来实现你想要的。

array_combine不能满足您的需要。

array_rip在php中不可用。所以我建议你有算法,即逻辑准备好你的功能。在你的项目中创建functions.php并在你的文件中添加你的函数。在你的代码中包含这个文件,然后你可以使用这个函数。

0

如果您使用PHP 5.1.0或更高版本,则可以使用array_intersect_key(),如下面的代码所示。

function array_rip(array &$array, array $keys) { 
    $result = array_intersect_key($array, array_flip($keys)); 
    $array = array_diff($array, $result); 

    return $result; 
} 
1

你可以缩短到这个;我不认为这会更有效率。

function array_rip(array &$array, array $keys) 
{ 
    $new = array_intersect_key($array, array_flip($keys)); 
    $array = array_diff($array, $new); 
    return $new; 
} 
相关问题