2017-02-13 93 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"; 
}