Способ сравнения ключа массива и замены значения, если найдено (PHP) - PullRequest
0 голосов
/ 06 августа 2020

Здравствуйте, я пытаюсь создать приложение php, но у меня проблемы с массивами На самом деле я пытаюсь сравнить ключ массива и, если он найден, заменить его значение и объединить весь массив в один.

Например

Массив ОДИН -

Array
    (
        [0] => Array
               (
                [label] => July 20 2020
                [y] => 3
               )
        [1] => Array
               (
                [label] => July 18 2020
                [y] => 1
               )
    )

Массив ДВА -

  Array
        (
            [0] => Array
                   (
                    [label] => July 18 2020
                    [y] => 0
                   )
            [1] => Array
                   (
                    [label] => July 19 2020
                    [y] => 0
                   )
            [2] => Array
                   (
                    [label] => July 20 2020
                    [y] => 0
                   )
            [3] => Array
                   (
                    [label] => July 21 2020
                    [y] => 0
                   )
        )

По желанию выходной массив

Array
            (
                [0] => Array
                       (
                        [label] => July 18 2020
                        [y] => 1
                       )
                [1] => Array
                       (
                        [label] => July 19 2020
                        [y] => 0
                       )
                [2] => Array
                       (
                        [label] => July 20 2020
                        [y] => 3
                       )
                [3] => Array
                       (
                        [label] => July 21 2020
                        [y] => 0
                       )
            )

Я пробовал

array_merge($arrayone, $arraytwo);

, но это не работает. Можно ли получить желаемый результат?

Так выглядит массив - https://imgur.com/a/HUQUmZz Пожалуйста, поделитесь своими мыслями по этому поводу. Спасибо

1 Ответ

1 голос
/ 06 августа 2020

С вашими массивами, я не думаю, что есть разумный способ сделать это, но это должно работать:

    <?php
$datesArray = [
    [
        'label' => 'July 18 2020',
        'y'     => 0,
    ],
    [
        'label' => 'July 19 2020',
        'y'     => 0,
    ],
    [
        'label' => 'July 20 2020',
        'y'     => 0,
    ],
    [
        'label' => 'July 21 2020',
        'y'     => 0,
    ],
];

$valuesArray = [
    [
        'label' => 'July 20 2020',
        'y'     => 3,
    ],
    [
        'label' => 'July 18 2020',
        'y'     => 1,
    ],
];

foreach($datesArray as &$dateArray) {
    foreach($valuesArray as $valueArray) {
        // use ?? if php version allows it, else do isset($valueArray['label']) ? $valueArray['label'] : null;
        $currentLabel = $valueArray['label'] ?? null; 
        if ($currentLabel === $dateArray['label']) {
            $dateArray['y'] = $valueArray['y'] ?? 0;
        }
    }
}

print_r($datesArray);
return $datesArray;

Результат:

Array
(
    [0] => Array
        (
            [label] => July 18 2020
            [y] => 1
        )

    [1] => Array
        (
            [label] => July 19 2020
            [y] => 0
        )

    [2] => Array
        (
            [label] => July 20 2020
            [y] => 3
        )

    [3] => Array
        (
            [label] => July 21 2020
            [y] => 0
        )

)

Это займет квадратичное c раз, если вам нужно что-то более быстрое, вам придется изменить индексы ваших массивов, чтобы ускорить поиск.

snippet

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