将三个数组的键和值与“ array_diff_ukey”进行比较

时间:2019-01-27 08:20:10

标签: php arrays

有人可以解释一下这段代码1中的-1($a>$b)?1:-1;是什么吗?

我知道Array ( [c] => blue )正在返回,因为$a2中不存在键c,并且key_compare_func需要返回小于,等于或大于0的数字。

但是我不明白,当key_compare_func返回0、1和-1时,我如何得到Array ( [c] => blue )

function myfunction($a,$b) {
    if ($a === $b) {
        return 0;
    }
    return ($a > $b) ? 1 : -1;
}

$a1=array("a"=>"red","b"=>"green","c"=>"blue");
$a2=array("a"=>"blue","b"=>"black","e"=>"blue");

$result=array_diff_ukey($a1,$a2,"myfunction");

3 个答案:

答案 0 :(得分:0)

如果($a>$b)为真(在?之后)-您返回1.否则(在:之后)将返回-1。

这是一种简短的编写方式:

if ($a>$b) {
    return 1; 
} else {
    return -1; 
}

答案 1 :(得分:0)

您可以在array-diff-ukey文档中看到,“ key_compare_func”需要返回小于,等于或大于0的数字。数字1-1只是此结果的示例。

根据您的情况,您可以简单地使用strcmp,因为它返回相同的逻辑。

由于{strong>键 Array ( [c] => blue )c数组中不存在,因此返回$a2

  

将array1中的键与array2中的键进行比较,并返回差值。此功能类似于array_diff(),只是比较是在键而不是值上进行的。

已编辑

特别是在array-diff-ukey中,您仅需要return 0,因为该函数确定键的方式相同,因此在您的示例中可以将其定义为:

function myfunction($a,$b) {
    if ($a === $b)
        return 0;
    return 1; // or -1 or 3 or -3 **just not 0** 
}

将其视为array-diff-ukey背后的逻辑:

array function array-diff-ukey($a1, $a2, $compareFunction) {
    $arr = array(); // init empty array
    foreach($a1 as $key1 => $value1) { // for each key in a1
        $found = false;
        foreach($a1 as $key2 => $value2) { //search for all keys in a2
            if ($compareFunction($key1, $key2) == 0)
                $found = true;  // found a key with the same
        }
        if ($found === false) // add the element only if non is found
            $arr[$key1] = $value1; 
    }
    return $arr;
}

答案 2 :(得分:0)

它是PHP中的三元运算符。您可以将其称为If / Else的简写。这是一个示例:

/* most basic usage */
$var = 5;
$var_is_greater_than_two = ($var > 2 ? true : false); // if $var greater than 2 
                                                      // return true 
                                                      // else false

如果您难以理解,可以使用以下方法进行更改:

if ($a===$b)
      {
        return 0;
      }
else if($a > $b)
    {
      return 1;
    }
else
   {
     return -1;
   }