繁体   English   中英

如何检查一个数组的值是否作为另一个数组的值或键存在?

[英]How to check if values of one array exists as values or keys of another array?

$word = array("red","or","bl","green","gr");

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

        );

//以数组颜色查找数组字的值与键或值无关。
//输出应同时显示键和值。

重新=>红色

或=>橙色

gr =>绿色

这是一个从数组$ 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;
}

如果您希望使用更紧凑的解决方案,请使用注释中描述的内容:

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

使用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消除重复项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM