代码之家  ›  专栏  ›  技术社区  ›  Iynga Iyngaran Iyathurai

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

  •  -1
  • Iynga Iyngaran Iyathurai  · 技术社区  · 7 年前

    1 和 -1 ($a>$b)?1:-1;

    Array ( [c] => blue ) 正在返回,因为中不存在密钥c $a2 和 key_compare_func 需要返回小于、等于或大于0的数字。

    数组([c]=>蓝色) ,当键_compare_func返回0、1和-1时:

    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 回复  |  直到 7 年前
        1
  •  0
  •   dWinder Dharman    7 年前

    正如你在书中看到的 array-diff-ukey 1 和 -1

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

    你有 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** 
    }
    

    认为这是背后的逻辑 阵列差分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
  •   Imnotapotato    7 年前

    如果 ($a>$b) ? : )将返回-1。

    这是一个简短的写作方式:

    if ($a>$b) {
        return 1; 
    } else {
        return -1; 
    }
    
        3
  •  0
  •   Saroj Shrestha    7 年前

    /* 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;
       }