$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服務對話突然崩潰。
JSON
這是我最喜歡的客廳把戲。
$arr = array('Hello', 'World');
這JSON-編碼,如你所願,到:
[ 'Hello', 'World' ]
比方說,我刪除最後一個元素,並重新JSON:
[ 'Hello' ]
但是,讓我們說,我刪除一個元素這不是最後的。 PHP做什麼?它刪除元素和密鑰,但不重新編號數組。該陣列現在有一個孔。而陣列沒有漏洞 - 字典做。
所以這現在是一個字典。而在JSON它突然變:
{ "1": "World" }
這意味着這個示例代碼巧妙地竊聽:
$arr = functionReturningArrayOfElements();
if (-1 != $killThisElement) {
unset($arr[$killThisElement]);
}
header('Content-Type: application/json');
die(json_encode($arr));
當$killThisElement
是最後的條目($計數($ 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.';
你已經鏈接到您問題的答案:*「array_intersect()返回一個包含數組所有參數中存在的array1的所有值**請注意,鍵將被保留**「* – Rizier123
什麼令你困惑的是,它們不是」數組「 - 它們是*字典*。 $ array1是[a =>綠色,0 =>紅色,1 =>藍色],有兩個數字自動鍵和一個文本鍵。在這種情況下使用array_intersect *是可能的,但是...恕我直言,**要小心避免**。 – LSerni
輸出是'$ array1'中存在於'$ array2'中的所有值。發現「綠色」和「紅色」,所以'$ array1'中的那些鍵被保留,其他值被丟棄。 –