2015-05-09 118 views
1

我寫這段代碼:PHP多維數組相交

<?php 

$aArray = array 
( 
array(0,0,0), 
array(1,0,0), 
array(2,0,0), 
array(3,0,0), 
array(4,0,0), 
array(5,0,0), 
array(6,0,0), 
array(7,0,0) 
); 

$jump = array 
( 
array(0,0,0), 
array(1,0,0), 
array(9,7,4), 
array(3,0,0), 
array(4,0,0), 
array(5,0,0), 
array(6,0,0), 
array(7,0,0) 
); 

$result = array_intersect($aArray, $jump); 

echo var_dump($result); 

我得到的結果是這樣的:

array(8) { 
[0]=> array(3) { 
    [0]=> int(0) 
    [1]=> int(0) 
    [2]=> int(0) } 
[1]=> array(3) { 
    [0]=> int(1) 
    [1]=> int(0) 
    [2]=> int(0) } 
[2]=> array(3) { 
    [0]=> int(2) 
    [1]=> int(0) 
    [2]=> int(0) } 
[3]=> array(3) { 
    [0]=> int(3) 
    [1]=> int(0) 
    [2]=> int(0) } 
[4]=> array(3) { 
    [0]=> int(4) 
    [1]=> int(0) 
    [2]=> int(0) } 
[5]=> array(3) { 
    [0]=> int(5) 
    [1]=> int(0) 
    [2]=> int(0) } 
[6]=> array(3) { 
    [0]=> int(6) 
    [1]=> int(0) 
    [2]=> int(0) } 
[7]=> array(3) { 
    [0]=> int(7) 
    [1]=> int(0) 
    [2]=> int(0) } 
    } 

爲什麼不是第二個索引返回null?我已經嘗試清空我的緩存,以防有舊值存儲在那裏。我也注意到,如果我從跳轉數組中刪除最後一個數組,它仍然會產生7,0,0。這是一個奇怪的異常?

回答

1

array_intersect()不是遞歸的,它將內部數組視爲一個數組。你需要使用這樣的東西:

function array_intersect_recursive() { 

    foreach(func_get_args() as $arg) { 
     $args[] = array_map('serialize', $arg); 
    } 
    $result = call_user_func_array('array_intersect', $args); 

    return array_map('unserialize', $result); 
} 

$result = array_intersect_recursive($aArray, $jump); 
+1

謝謝@AbraCadaver。我懷疑它與要求遞歸函數有關。很有幫助。我還發現,當它返回相交點時,如果一個嵌套數組至少有一個鍵/值匹配,它將返回整個事物,因爲它返回第一個參數的鍵。 – upndown