我想要达到的目标是否有一个固有的功能


Is there a native function of what I am trying to achieve?

我写了一个函数,这似乎是一个常见的任务,我一直在看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
)

你可以缩短为this;但我不认为它会更有效率。

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

没有这样的函数,但是您可以使用以下代码实现

$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)

尝试使用array_combine().

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

如果你像@Artem L建议的那样使用数组翻转函数,你可以实现你想要的,但它会花费一点额外的处理时间,因为它会调用array_flip 3次来实现你想要的。

array_combine不能满足你的需要。

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

如果使用的是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;
}
相关文章: