有人可以解释一下这段代码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");
答案 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;
}