Объединить массив php на основе двух уникальных значений - PullRequest
1 голос
/ 06 октября 2011

Я ищу способ сделать довольно странное слияние массивов между многомерными массивами.Возьмите следующие два массива arrayOne и arrayTwo в качестве примеров.

Я хотел бы объединить массивы в arrayThree, который будет отображать уникальные элементы массивов, если оба number и letter вместе взятые уникальныОн объединит значения из одного массива с другим, и если значение не будет присутствовать, то он предоставит пустую строку.(см. arrayThree, что я имею в виду)

Любые идеи?

$arrayOne = array(
        array('number' => 1, 'letter' => 'a', 'qcol' => 'tennis'),
        array('number' => 1, 'letter' => 'b', 'qcol' => 'soccer'),
        array('number' => 2, 'letter' => 'a', 'qcol' => 'basketball'),
        array('number' => 2, 'letter' => 'b', 'qcol' => 'football'),
        array('number' => 3, 'letter' => 'a', 'qcol' => 'bowling'),
        array('number' => 3, 'letter' => 'b', 'qcol' => 'rugby')
    );

$arrayTwo = array(
        array('number' => 1, 'letter' => 'a', 'rval' => 'bus'),
        array('number' => 1, 'letter' => 'b', 'rval' => 'car'),
        array('number' => 2, 'letter' => 'a', 'rval' => 'truck'),
        array('number' => 2, 'letter' => 'b', 'rval' => 'plane'),
        array('number' => 4, 'letter' => 'b', 'rval' => 'boat')
    );

объединятся в:

$arrayThree = array(
        array('number' => 1, 'letter' => 'a', 'rval' => 'bus', 'qcol' => 'tennis'),
        array('number' => 1, 'letter' => 'b', 'rval' => 'car', 'qcol' => 'soccer'),
        array('number' => 2, 'letter' => 'a', 'rval' => 'truck', 'qcol' => 'basketball'),
        array('number' => 2, 'letter' => 'b', 'rval' => 'plane', 'qcol' => 'football'),
        array('number' => 3, 'letter' => 'a', 'rval' => '', 'qcol' => 'bowling'),
        array('number' => 3, 'letter' => 'b', 'rval' => '', 'qcol' => 'rugby'),
        array('number' => 4, 'letter' => 'b', 'rval' => 'boat', 'qcol' => '')
    );

1 Ответ

3 голосов
/ 06 октября 2011
$arrayThree = array();

foreach ($arrayOne as $i) {
    $arrayThree[$i['number'] . $i['letter']] = $i + array('rval' => null);
}
foreach ($arrayTwo as $i) {
    $key = $i['number'] . $i['letter'];
    if (isset($arrayThree[$key])) {
        $arrayThree[$key]['rval'] = $i['rval'];
    } else {
        $arrayThree[$key] = $i + array('qcol' => null);
    }
}

$arrayThree = array_values($arrayThree);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...