我写了一个似乎是常见任务的函数,我一直在浏览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
(
[color] => green
[fruit] => apple
)
Array
(
[owner_id] => 420
[item_id] => 33
)
答案 0 :(得分:1)
你可以缩短它;我认为它不会更有效率。
function array_rip(array &$array, array $keys)
{
$new = array_intersect_key($array, array_flip($keys));
$array = array_diff($array, $new);
return $new;
}
答案 1 :(得分:0)
尝试使用array_combine()。
$array = array_combine(array_keys($array1), array_values($array2));
答案 2 :(得分: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)
答案 3 :(得分:0)
如果您使用像@Artem L建议的数组翻转功能,您可以实现您想要的效果,但它需要一点额外的处理时间,因为它调用array_flip 3次以达到您想要的效果。
array_combine将无法满足您的需求。
array_rip在php中不可用。所以我建议你有算法,即逻辑准备好你的功能。在项目中创建functions.php并在此文件中添加您的函数。在您的代码中包含此文件,然后您可以使用此功能。
答案 4 :(得分: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;
}