Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将三个数组的键和值与“比较”;数组“u diff”u ukey“;_Php_Arrays - Fatal编程技术网

Php 将三个数组的键和值与“比较”;数组“u diff”u ukey“;

Php 将三个数组的键和值与“比较”;数组“u diff”u ukey“;,php,arrays,Php,Arrays,有人能解释一下,这段代码中的1和-1是什么:($a>$b)?1:-1 我知道数组([c]=>蓝色)正在返回,因为键c不存在于$a2中,并且键比较函数需要返回小于、等于或大于0的数字 但是我不明白,当key\u compare\u func返回0、1和-1时,我如何得到数组([c]=>蓝色): function myfunction($a,$b) { if ($a === $b) { return 0; } return ($a > $b) ? 1 :

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

我知道
数组([c]=>蓝色)
正在返回,因为键c不存在于
$a2
中,并且
键比较函数
需要返回小于、等于或大于0的数字

但是我不明白,当key\u compare\u func返回0、1和-1时,我如何得到
数组([c]=>蓝色)

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");
如果
($a>$b)
为true(就在
之后),则返回1。else(就在
之后)将返回-1

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

if ($a>$b) {
    return 1; 
} else {
    return -1; 
}
正如您在文档中看到的,“key_compare_func”需要返回小于、等于或大于0的数字。数字
1
-1
就是这个结果的示例

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

您在返回中有
数组([c]=>蓝色)
,因为
$a2
数组中不存在

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

已编辑

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

function myfunction($a,$b) {
    if ($a === $b)
        return 0;
    return 1; // or -1 or 3 or -3 **just not 0** 
}
将其视为
数组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;
}

它是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;
   }

比较功能要求有3个可能选项-
0
用于相等、正和负<代码>1
-1
是正面和负面结果的示例感谢您的评论。但是,它如何返回这个结果?数组([c]=>blue)可能与更新后的我的帖子重复,更深入地解释了数组的工作方式谢谢你的评论。我知道返回中的数组([c]=>蓝色),因为$a2中不存在键c,“key_compare_func”需要返回小于、等于或大于0的数字。数字1和-1。但是我不明白,当key\u compare\u func返回0、1和-1时,我如何得到数组([c]=>蓝色)。@lyathurailyngaran当函数比较两个数组中的所有键时,她检查相似性(如果compare函数返回0)-对于除
c
以外的所有情况,
a2
中有一个键,调用
myfunction(@key\u FROM_$A1@,@key\u FROM_$a2@)
返回0(相同的键),除了
c
-这就是为什么他是唯一返回此行的人($a>$b)?1:-1;必须返回除0以外的任何内容吗?示例返回10也必须给出相同的结果?如果将其与
数组diff ukey
一起使用,则为“是”。如果这篇文章帮助你考虑将它标记为接受