2015-10-19 27 views
-1

我有兩個數組如何比較兩個數組,並從一個陣列添加密鑰到另一個

1陣列

第一陣列containts 60串這樣的:

['string1','string2', ... , string60];

2nd array

而且我有一個關聯數組是這樣的:

['Key' => value, ..., 'Key' => value]

我需要做的是比較來自第一陣列(包含60個ellements)的每個值,每個關鍵從第二個數組,如果第二個(關聯)數組不包含匹配來自第一個數組的任何值的鍵 - 我應該將這樣的元素添加到關聯數組中。

例如第二個數組沒有與string5匹配的密鑰,我不是在談論密鑰的價值,我實際上是在談論Key本身。所以現在我需要添加string5作爲新的密鑰=>數組元素,Key必須是單詞string5,並且value必須爲空。

這樣做的最佳方法是什麼?

+0

'foreach($ array1 as $ key){ifset($ array2 [$ key]){...' –

回答

2

不復雜得多:

$combined = $array2 + array_fill_keys($array1, null); 

array_fill_keys創建像['string1' => null, ..]數組,+將所有這些鍵不已經存在於$array2的。

+2

想知道爲什麼這是downvoted。自己測試並按照預期工作。 – Jeroen

+2

*「這不可能工作」的膝反動反應*::o) – deceze

+1

因此,它的工作原理並沒有期待;) – Jeroen

0

這應該工作

foreach($array_1 as $val) { 
    if(!isset($array_2[$val])) { 
     $array_2[$val] = null; 
    } 
} 

相當肯定有,誰知道更有效的方式(資源英明),因爲這時候你有龐大的陣列可能需要很長時間的人。

0

這是執行此操作的邏輯方法。 首先將第二個數組分爲key和values數組。我是指兩個不同的陣列。

所以

$keys = array_keys($array2); 
$values = array_values($array2); 

現在你必須採取從$陣列1的不同,以$奇異數組2或反之亦然(取決於您的要求),它會給你丟失的鑰匙的差異。

$diff = array_diff($array1,$keys); 

現在您將可以輕鬆找到它。

Please refer to array_diff Source: php.net

0
<?php 
    $required = array('key1', 'key2', 'key3','key4'); 

    $data = array(
     'key1' => 10, 
     'key2' => 20 
); 

    $arrayDiff = array_diff_key(array_flip($required),$data); 
    $final = array_merge($data,$arrayDiff); 
    // Result 
    // Array 
    //(
    // [key1] => 10 
    // [key2] => 20 
    // [key3] => 2 
    // [key4] => 3 
    //) 
?> 

如果你想默認值來填充新的鍵添加到陣列中,添加以下行合併之前,使用變量$ arrayFill而不是$ arrayDiff在合併聲明

$arrayFill = array_fill_keys(array_flip($arrayDiff),0); 
1

$合併= $數組2 + array_fill_keys($ ARRAY1,NULL); //密鑰值將被保持

array_values($數組2); //索引從0開始

相關問題