【问题标题】:How to check if values of one array exists as values or keys of another array?如何检查一个数组的值是否作为另一个数组的值或键存在?
【发布时间】:2015-02-13 23:49:04
【问题描述】:
$word = array("red","or","bl","green","gr");

$colors = array( "re"=>"red" ,
                     "or"=>"orange",
                     "bc"=>"black" ,
                     "br" =>"brown",
                     "gr" =>"green"

        );

//在数组颜色中查找数组单词的值,不管它的键还是值。
//输出应该同时显示键和值。

re => 红色

或 => 橙色

gr => 绿色

【问题讨论】:

标签: php


【解决方案1】:

这是一个函数,用于计算从数组 $contains 到 $array 的键和值的交集(?):

function array_full_intersect($array, $contains) {
    $result = array();
    // Go through each element in $contains.
    foreach ($contains as $val) {
        // If $val is a key in $array, add key-value pair to $result.
        if (isset($array[$val])) {
            $result[$val] = $array[$val];
        } else {
            // Otherwise, if $val is a value in $array, search for the value and get its key.
            // Add key-value pair to $result.
            $key = array_search($val, $array);
            if ($key !== false) {
                $result[$key] = $val;
            }
        }
    }

    return $result;
}

如果您更喜欢更紧凑的解决方案,请使用 cmets 中描述的内容:

function array_full_intersect($array, $contains) {
    return array_merge(array_intersect_key($array, array_flip($contains)), array_intersect($array, $contains));
}

用作:

$result = array_full_intersect($colors, $word);

【讨论】:

    【解决方案2】:

    使用 PHP 数组函数:

    $values = array_intersect($colors, $word);
    $flip = array_flip($colors);
    $flipValues = array_intersect($flip, $word);
    $keys = array_flip($flipValues);
    $result = array_merge($values, $keys);
    

    把它拆开:

    1. $values = array_intersect($colors, $word);

    创建一个包含所有 $colors 成员的数组,其值与 $word 中的值相同,即

        $values = array(
                     "re"=>"red",
                     "gr" =>"green"
         );
    
    2. $flip = array_flip($colors);
    

    这会翻转 $colors 的键和值,所以它是:

    $flip = array( "red" => "re",
                   "orange" => "or",
                   "black" => "bc",
                   "brown" => "br",
                   "green" => "gr"
    
        );
    
    1. $flipValues = array_intersect($flip, $word);

    这再次使用了array_intersect,但在键(即$flip 中的值)上。所以这将是

    $flip = array( "orange" => "or",
                   "green" => "gr"
        );
    
    4. $keys = array_flip($flipValues);
    

    这会将结果再次翻转:

    $keys= array( "or" => "orange",
                  "gr" => "green"
        );
    

    然后 array_merge 结合 $values 和 $keys 消除重复。

    【讨论】:

      猜你喜欢
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      相关资源
      最近更新 更多