比较数组中的键并使用比较值创建新数组

时间:2017-02-13 15:28:35

标签: php arrays comparison

我需要比较两个数组,然后创建一个新数组,其中键保持不变,但是使用两个数组中的两个值添加一个新数组作为值。

$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中,请不要添加此键或它对新数组的值。)

3 个答案:

答案 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";
}