1

2 つの配列をマージする簡単なソリューションを探しています。1 つのキーと値のペアを除いて、どちらもほとんど同じように見えます。結果に両方の可能な値を持つ配列が必要です。

xdebugged 配列は次のようになります (簡略化)。

array (size=3)
    'entry' => string '18' (length=2)        
    'mykey' => string 'value1' (length=6) // here is the difference
    'something' => string '1' (length=1)
array (size=3)
    'entry' => string '18' (length=2)        
    'mykey' => string 'value2' (length=6)) // here is the difference
    'something' => string '1' (length=1)

結果を次のようにしたい:

array (size=2)
    'entry' => string '18' (length=2)        
    'mykey' => array (size=2)) // both values merged to array
         '0' => 'value1' (length=6)
         '1' => 'value2' (length=6)
    'something' => string '1' (length=1)

これを簡単に達成する方法は?

4

3 に答える 3

0

これには、独自のカスタム コードを記述する必要があります。

// Get all the key values.
foreach($arrays as $array){
$keys[] = $array['mykey']
}

// retain 1st element & discard others.
$array = array_slice($arrays, 0, 1);

// update to the 1st array element
$array['mykey'] = $keys;

// print
print_r($array);

これが役立つことを願っています。

于 2013-07-02T18:29:01.170 に答える
0

この機能は、必要なものに合わせて設計されていると思います。

array_merge_recursive($array1, $array2)

于 2013-07-02T18:29:01.353 に答える
0

これで十分でしょうか:

<?php
$array1 = array(
    'entry'=>'18',
    'mykey'=>'value1',
    'something'=>'1'
);
$array2 = array(
    'entry'=>'18',
    'mykey'=>'value2',
    'something'=>'1'
);

$output = array();
foreach($array1 as $k=>$v){
    if(isset($array2[$k]) && $array2[$k] === $v){
        $output[$k] = $v;
    }elseif(isset($array2[$k])){
        $output[$k][] = array($v,$array2[$k]);
    }else{
        $output[$k] = $v;
    }
}

foreach($array2 as $k=>$v){
    if(!array_key_exists($k,$output)){
        $output[$k] = $v;
    }
}

echo '<pre>',print_r($output),'</pre>';

編集: Ziarnoarray_merge_recursive()で言及されているの使用が好きですが、問題は、キーごとに配列が作成されることです。そのため、 の使用を追加し、長さが 1 であるかどうかを確認し、そうであれば平坦化します。array_unique()

$output = array_merge_recursive($array1, $array2);

foreach($output as $k=>&$v){
    $v = array_unique($v);
    if(count($v)==1){
        $v = $v[0];
    }
}

echo '<pre>',print_r($output),'</pre>';
于 2013-07-02T18:23:37.000 に答える