我需要比较两个数组,然后创建一个新数组,其中键保持不变,但是使用两个数组中的两个值添加一个新数组作为值。
$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>';
另一件事是我需要键才能获得值,如果键存在于初始数组中(即如果一个键不在array1中但是存在于array2中,请不要添加此键或它对新数组的值。)
答案 0 :(得分:0)
循环第一个数组,检查第二个数组中的值,如果存在则添加两个:
foreach($array1 as $k => $v) {
$newCompparedArray[$k] = isset($array2[$k]) ? array($v, $array2[$k]) : $v;
}
然后您的显示循环将是:
foreach($newCompparedArray as $k => $v) {
echo '<td>'.$k.'</td><td>'.$v[0].'</td><td>'.$v[1].'</td>';
}
显然,在第一个循环中,如果您定义array('value1'=>$v, 'value2'=>$array2[$k])
,则可以使用$v['value1]
和$v['value2']
。
较短的版本:
$newCompparedArray = array_intersect_key(array_merge_recursive($array1, $array2), $array1);
答案 1 :(得分: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>';
诀窍是首先获取两个数组中的键。
答案 2 :(得分: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";
}