Как объединить два массива дат, игнорируя повторяющиеся даты, а затем отсортировать по дате - PullRequest
2 голосов
/ 18 февраля 2012

Например, у меня есть $ даты1 и $ даты2, показанные ниже, и я хочу создать $ даты3, который хранит все даты в $ даты1 и добавляет любые уникальные даты в $ даты2, игнорируя любые дубликаты.Массивы содержат другие значения, но я просто показываю даты, потому что это то, что я хочу объединить / отсортировать по.

$ date1 =

Array
(
[0] => Array
    (
        [day] => 2012-01-01
        [foo] => "bar"
    )

[1] => Array
    (
        [day] => 2012-01-02
        [foo] => "bar"
    )

[2] => Array
    (
        [day] => 2012-01-03
        [foo] => "bar"
    )
)

$ date2 =

Array
(
[0] => Array
    (
        [day] => 2011-12-31
    )

[1] => Array
    (
        [day] => 2012-01-01
    )

[2] => Array
    (
        [day] => 2012-01-02
    )
[3] => Array
    (
        [day] => 2012-01-03
    )
[4] => Array
    (
        [day] => 2012-01-04
    )
)

Итак, я хотел бы объединить $ date2 в $ date1, игнорируя любые дубликаты, чтобы получить $ date3:

Array
(
[0] => Array
    (
        [day] => 2011-12-31
    )

[1] => Array
    (
        [day] => 2012-01-01
        [foo] => "bar"
    )

[2] => Array
    (
        [day] => 2012-01-02
        [foo] => "bar"
    )
[3] => Array
    (
        [day] => 2012-01-03
        [foo] => "bar"
    )
[4] => Array
    (
        [day] => 2012-01-04
    )
)

Ответы [ 2 ]

0 голосов
/ 18 февраля 2012

Как то так должно работать

$a1 = array(array('day' => '2012-01-01', 'foo' => 'bar1'),
            array('day' => '2012-01-02', 'foo' => 'bar2'),
            array('day' => '2012-01-03', 'foo' => 'bar3'));

$a2 = array(array('day' => '2011-12-31'),
            array('day' => '2012-01-01'),
            array('day' => '2012-01-02'),
            array('day' => '2012-01-03'),
            array('day' => '2012-01-04'));

$orderedArray = array();
foreach (array_merge($a1, $a2) as $v)
{
    if (count($v) == 1 && isset($orderedArray[$v['day']]))
        continue;

    $orderedArray[$v['day']] = $v;
}
ksort($orderedArray);

print_r($orderedArray);

Редактировать: я переделал код.

0 голосов
/ 18 февраля 2012

Я не уверен, что правильно вас понимаю, вы имеете в виду нечто подобное?

    $old_array = array_merge($dates1, $dates2);
    $new_array = array();
    foreach ($old_array as $item){
        if (!array_key_exists($item['day'], $new_array)){
            $new_array[$item['day']] = $item;
        }
    }
    return $new_array;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...