对于一个项目我发现我必须开始使用数组相交。
QPalette::Base
我发现这段代码解释了该功能的作用:
<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
?>
输出让我感到困惑。
(
[a] => green
[0] => red
)
在这种情况下a
和0
的含义是什么?
不应该是0 1为什么它以a开头然后变为0.
答案 0 :(得分:3)
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
首先,我们必须按原样编写这些词典;上面的表格是“精简的”,带有隐式数字键。
$array1 is a: green, 0: red, 1: blue
$array2 is b: green, 0: yellow, 1: red
现在array_intersect
检查值是常见的。它们是绿色和红色。来自array1的相应项:
a: green
0: red
所以你有两个键,'a'和0,分别映射到绿色和红色。
此时我会补充说,混合使用数字和非数字键是灾难的一种方法,除非你非常小心你在做什么;许多PHP函数不会保留键并重新编号将字典转换为数组的值。
正如您所看到的,从字典中告诉数组并不是立竿见影的。为了增加风险,JSON编码对于两者来说完全不同,因此结构中的微小变化可能会使Web服务对话突然崩溃。
这是我最喜欢的客厅技巧。
$arr = array( 'Hello', 'World' );
正如您所期望的那样,这个JSON编码:
[ 'Hello', 'World' ]
假设我删除了最后一个元素并重新使用JSON:
[ 'Hello' ]
但是我要说我删除的元素不是最后一个。 PHP做什么?它删除元素和键,但不重新编号数组。该数组现在有一个 hole 。并且数组没有漏洞 - 词典。
所以现在这是一个字典。在JSON中它突然变成:
{ "1": "World" }
这意味着此示例代码被巧妙地错误地:
$arr = functionReturningArrayOfElements();
if (-1 != $killThisElement) {
unset($arr[$killThisElement]);
}
header('Content-Type: application/json');
die(json_encode($arr));
当$killThisElement
是最后一个条目($ count($ arr)-1)时,JSON将被编码为数组。否则,它将被编码为字典。
在回来之前,我需要确定我的回报:
$arr = array_values($arr); // This renumbers the keys, forcing it to always be an array
或
$arr['count'] = count($arr);
// This adds a non-numeric key, forcing $arr to always be a dictionary.
// The extra key is called 'count' just so it makes sense, but it is also
// a BAD IDEA, since it encourages to loop through the object instead of
// using the proper Javascript Object methods. A better choice from this
// point of view would be
$arr['comment'] = 'This is a dictionary.';
答案 1 :(得分:1)
array_intersect()
函数比较两个(或更多)数组的值,并返回匹配项。此函数比较两个或多个数组的值,并返回一个数组,其中包含
array1
,array2
等中存在的array3
条目。< / p>
因此,在您的情况下,数组包含带键和不带键的元素,因此如果我们比较数组,我们会发现$array2
中有green
和red
元素存在于{{ 1}},所以如果你使用$array1
打印数组,它将把数组放入自定义&amp;保留的密钥(在未分配密钥的情况下保留)。
因此,如果您尝试打印print_r()
,那就像是:
$array1
希望这有帮助!
答案 2 :(得分:0)
表示$array1
就像这样构建。
$array1 = array("a" => "green", 0 => "red", 1 => "blue");
因此,array_intersect
维护这些键的关键:使用维持
"a" => "green", 0 => "red"