数组操作(比较)由特定的algortihm

时间:2017-11-03 17:48:39

标签: php arrays

我有2个数组,我需要通过我的特定算法比较这些数组。

首先,我的阵列:

$old = [
    'pencil' => 'red',
    'eraser' => 'green',
    'bag'    => 'blue'
];

$new = [
    'pencil'   => '',
    'eraser'   => '',
    'computer' => 'mac',
    'bag'      => '',
    'activity' => [
        'jumping',
        'pool',
        'reading'
    ]
];

然后,我想得到这个输出:

$output = [
    'pencil'   => 'red', // old value
    'eraser'   => 'green', // old value
    'bag'      => 'blue', // old value
    'computer' => 'mac', // new key & values
    'activity' => [ // new key & values
        'jumping',
        'pool',
        'reading'
    ]
];

因此,旧数组和新数组中的元素(数组项)将添加到输出中,但值应来自旧数组。

新数组中的元素(数组项)应该完全转移到输出。

我想用照片附件支持我的问题(照片上的序列可能与我的阵列上的序列不匹配($ old,$ new)):

photo

3 个答案:

答案 0 :(得分:1)

使用array_merge以合并两个数组的元素:

$result = array_merge($new, $old);

第二个数组($ old)中的值将合并到第一个数组上,因此如果两个数组中都有一个键,则第二个数组将显示在结果中。

答案 1 :(得分:0)

我认为以下代码可以实现您的目标:

$output = []
foreach($old as $key => $value){ 
  $output[$key] = $value;
}

foreach($new as $key => $value){
  if(!array_key_exists($key, $output)){
    $output[$key] = $value;
  }
}

答案 2 :(得分:0)

这是我的解决方案,

$old = [
    'pencil' => 'red',
    'eraser' => 'green',
    'bag'    => 'blue'
];

$new = [
    'pencil'   => '',
    'eraser'   => '',
    'computer' => 'mac',
    'bag'      => '',
    'activity' => [
        'jumping',
        'pool',
        'reading'
    ]
];

$output = [];

foreach ($new as $newkey => $newvalue) {
    if($newvalue!=""){
        $output = [$old+$new];
    }
}

echo "<pre>";
print_r($output);
echo "</pre>";
exit;

这里的输出看起来像,

Array
(
    [0] => Array
        (
            [pencil] => red
            [eraser] => green
            [bag] => blue
            [computer] => mac
            [activity] => Array
                (
                    [0] => jumping
                    [1] => pool
                    [2] => reading
                )

        )

)