2017-02-13 136 views
-1

我有兩個數組,我需要進行比較,然後創建一個新數組,其中鍵保持不變,但添加了一個新的數組作爲value,兩個陣列。比較數組中的鍵並使用比較值創建新數組

$array1 = (['SE'] => (string) '123', ['DE'] => (string) '456', ['DK'] => (string) '678'); 
$array2 = (['SE'] => (string) '999', ['DE'] => (string) '888', ['US'] => (string) '777'); 

所以我想要實現的是從兩個數組中獲得兩個數值相等的值。 然後我需要以類似的方式迴應它;

echo '<table>'; 
foreach($newCompparedArray as $k => $v){ 
    echo '<tr>'; 
    echo '<td>'.$k.'</td><td>'.$v->value1.'</td><td>'.$v->value2.'</td>'; 
    echo '</tr>'; 
} 
echo '</table>'; 

另一件事情是我需要的關鍵,只得到了價值,如果關鍵是目前的初始陣列中(例如,如果一個關鍵是不是在陣列1,但存在於數組2,不添加此鍵或者它是新數組的值)。

回答

0

這應該給你想要的東西:

$array1 = array('SE' => '123', 'DE' => '456', 'DK' => '678'); 
$array2 = array('SE' => '999', 'DE' => '888', 'US' => '777'); 

$keysInBothArrays = array_intersect(array_keys($array1),array_keys($array2)); 
$newCompparedArray = array(); 
foreach ($keysInBothArrays as $key) { 
    $newCompparedArray[$key] = array($array1[$key],$array2[$key]); 
} 
// print_r($newCompparedArray); exit; 

echo '<table>'; 
foreach($newCompparedArray as $k => $v){ 
    echo '<tr>'; 
    echo '<td>'.$k.'</td><td>'.$v[0].'</td><td>'.$v[1].'</td>'; 
    echo '</tr>'; 
} 
echo '</table>'; 

訣竅是讓它們在兩個數組第一的關鍵。

+0

YES!謝謝:)我一直在看這個太久,只是在圈子裏。 – axelra82

0

循環的第一陣列,檢查第二陣列中的價值,如果它存在添加兩個:顯然,在第一循環

foreach($newCompparedArray as $k => $v) { 
    echo '<td>'.$k.'</td><td>'.$v[0].'</td><td>'.$v[1].'</td>'; 
} 

foreach($array1 as $k => $v) { 
    $newCompparedArray[$k] = isset($array2[$k]) ? array($v, $array2[$k]) : $v; 
} 

那麼你的顯示器循環會如果你定義了array('value1'=>$v, 'value2'=>$array2[$k])那麼你可以使用$v['value1]$v['value2']

較短的版本:

$newCompparedArray = array_intersect_key(array_merge_recursive($array1, $array2), $array1); 
0

假設我理解你想爲

Array(
    [SE] => Array ([0] => 123, [1] => 999) 
    [DE] => Array ([0] => 456, [1] => 888) 
    [DK] => Array ([0] => 678) 
    [US] => Array ([0] => 777) 
) 

輸出我會使用此代碼

$array1 =array ('SE' => '123', 'DE' => '456', 'DK' => '678'); 
$array2 =array ('SE' => '999', 'DE' => '888', 'US' => '777'); 

$t =array(); 
foreach ($array1 as $key => $value) 
    $t [$key] =array ($value); 
foreach ($array2 as $key => $value) { 
    if (!isset ($t [$key])) 
     $t [$key] =array ($value); 
    else 
     $t [$key] [] =$value; 
} 
//print_r ($t); 
foreach ($t as $key => $value) { 
    echo '<tr>'; 
    echo "<td>$key</td><td>" . implode ("</td><td>", $value) . '</td>'; 
    echo "</tr>\n"; 
}