代码之家  ›  专栏  ›  技术社区  ›  Ayaz Alavi

按键获取数组值

  •  53
  • Ayaz Alavi  · 技术社区  · 15 年前

    我正在搜索一个内置的PHP函数,它将键数组作为输入,并返回相应的值。

    例如,我有一个以下数组

    $arr = array("key1"=>100, "key2"=>200, "key3"=>300, 'key4'=>400);
    

    我需要钥匙的价值观 KEY2 和 密钥4 所以我还有一个 array("key2", "key4") 我需要一个将这个数组和第一个数组作为输入并提供响应值的函数。所以回应是 array(200, 400)

    4 回复  |  直到 9 年前
        1
  •  112
  •   Gras Double    9 年前

    我想你在找 array_intersect_key . 例子:

    array_intersect_key(array('a' => 1, 'b' => 3, 'c' => 5), 
                        array_flip(array('a', 'c')));
    

    将返回:

    array('a' => 1, 'c' => 5);
    

    你可以用 array('a' => '', 'c' => '') 而不是 array_flip(...) 如果你想要一个更简单的代码。

    注意,数组键是保留的。你应该使用 array_values 然后,如果您需要一个序列数组。

        2
  •  16
  •   Blake    12 年前

    另一个答案是:

    $keys = array("key2", "key4");
    
    return array_map(function($x) use ($arr) { return $arr[$x]; }, $keys);
    
        3
  •  4
  •   Amber    15 年前
    foreach($input_arr as $key) {
        $output_arr[] = $mapping[$key];
    }
    

    这将导致 $output_arr 具有与键列表相对应的值 $input_arr ,基于中的键-值映射 $mapping . 如果需要,可以将其包装为一个函数:

    function get_values_for_keys($mapping, $keys) {
        foreach($keys as $key) {
            $output_arr[] = $mapping[$key];
        }
        return $output_arr;
    }
    

    你可以这样称呼它:

    $a = array('a' => 1, 'b' => 2, 'c' => 3);
    $values = get_values_for_keys($a, array('a', 'c'));
    // $values is now array(1, 3)
    
        4
  •  4
  •   Bruno Augusto    13 年前

    对于给出的解决方案,值得考虑的一个问题是使用array_intersect_key(),如果第二个参数的值重复,则在传递给array_flip()时,它们将被覆盖,因为显然,数组索引是唯一的。

    第二种方法不会发生这种情况,因为没有翻转,因此适合某些情况。

    推荐文章