@99-rus

Присвоить значение массива переменной?

Есть вот такой массив:
Array
(
    [28.06.2024] => Array
        (
            [0] => Петров Петр Петрович
            [1] => Петров Петр Петрович
        )

    [03.07.2024] => Array
        (
            [0] => Петров Петр Петрович
            [1] => Иванов Иван Иванович
            [2] => Петров Петр Петрович
            [3] => Иванов Иван Иванович
        )

    [02.07.2024] => Array
        (
            [0] => Петров Петр Петрович
            [1] => Иванов Иван Иванович
        )

    [01.07.2024] => Array
        (
            [0] => Иванов Иван Иванович
        )

    [22.06.2024] => Array
        (
            [0] => Петров Петр Петрович
        )

    [17.06.2024] => Array
        (
            [0] => Иванов Иван Иванович
        )

    [26.06.2024] => Array
        (
            [0] => Петров Петр Петрович
        )

    [05.07.2024] => Array
        (
            [0] => Петров Петр Петрович
        )

    [04.07.2024] => Array
        (
            [0] => Иванов Иван Иванович
        )

)

Нужно присвоить значение
Иванов Иван Иванович
И
Петров Петр Петрович
Двум разным переменным. Сразу скажу что extract не подходит, потому что как мы видим, в массиве ключей может быть не 2, а до 4. Т.е. нужно как-то сначала наверное избавиться от дублирования имен на конкретную дату, а затем уже присваивать. При этом я могу в другом цикле вставлять дату в этот массив, но вот беда, в другом цикле может быть дата, которой нет в данном массиве - и это тоже проблема!
P.S. Да, тут на хабре есть похожие темы, но с другими массивами, эти решения не подходят.
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 2
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
На лицо "проблема XY"

<?php
$input = [
    '28.06.2024' => ['Петров Петр Петрович', 'Петров Петр Петрович'],
    '03.07.2024' => ['Петров Петр Петрович', 'Иванов Иван Иванович', 'Петров Петр Петрович', 'Иванов Иван Иванович'],
    '02.07.2024' => ['Петров Петр Петрович', 'Иванов Иван Иванович'],
    '01.07.2024' => ['Иванов Иван Иванович', 'Петров Петр Петрович', 'Иванов Иван Иванович'],
    '26.06.2024' => ['Петров Петр Петрович', 'Петров Петр Петрович'],
    '04.07.2024' => ['Иванов Иван Иванович']
];

$names = [];
foreach($input as $rows) {
    foreach($rows as $name) {
        $names[$name] = $name;
    }
}

$names = array_values($names);

var_dump($names[0]);

var_dump($names[1]);
Ответ написан
AnatolTh
@AnatolTh
Full Stack Developer
<?php

$dates = [
    '28.06.2024',
    '29.06.2024',
    '30.06.2024',
    '01.07.2024',
    '02.07.2024',
    '03.07.2024',
    '04.07.2024'
];

$names = [
    '28.06.2024' => ['Петров Петр Петрович', 'Петров Петр Петрович'],
    '03.07.2024' => ['Петров Петр Петрович', 'Иванов Иван Иванович', 'Петров Петр Петрович', 'Иванов Иван Иванович'],
    '02.07.2024' => ['Петров Петр Петрович', 'Иванов Иван Иванович'],
    '01.07.2024' => ['Иванов Иван Иванович', 'Петров Петр Петрович', 'Иванов Иван Иванович'],
    '26.06.2024' => ['Петров Петр Петрович', 'Петров Петр Петрович'],
    '04.07.2024' => ['Иванов Иван Иванович']
];

$strangeTask = new StrangeTask($names);
$allNames = $strangeTask->getNames();

foreach ($dates as $date) {
    foreach ($allNames as $name) {
        echo $strangeTask->getNameOnDate($date, $name);
    }
}

class StrangeTask
{
    public function __construct(public array $names)
    {
    }

    public function getNameOnDate(string $date, string $name): ?string
    {
        if (!isset($this->names[$date])) {
            return null;
        }

        return in_array($name, $this->names[$date]) ? $name : null;
    }

    public function getNames(): array
    {
        $names = [];
        array_walk_recursive($this->names, function ($v) use (&$names) {
            $names[$v] = $v;
        });

        return $names;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы