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

Как можно извлечь значения "Иванов Иван Иванович" и "Петров Петр Петрович" из данного массива, избегая дублирования имен на конкретные даты? Существует возможность, что в другом цикле может появиться дата, отсутствующая в этом массиве. Какие подходы могут быть применены для решения этой проблемы?
  • 26 июня 2024 г. 14:52
Ответы на вопрос 2
Для присвоения значения из массива переменной, необходимо обратиться к нужному элементу массива по его индексу. Например, если у нас есть массив $names и мы хотим присвоить значение из первого элемента этого массива переменной $name, то нужно написать такой код: $name = $names[0];

Чтобы извлечь значения "Иванов Иван Иванович" и "Петров Петр Петрович" из данного массива с учетом дат, можно создать ассоциативный массив, где ключами будут даты, а значениями - ФИО. Например:
```
$names = array(
    "2022-01-01" => "Иванов Иван Иванович",
    "2022-01-02" => "Петров Петр Петрович"
);
```

Для извлечения значений из такого массива можно использовать конструкцию if для проверки наличия нужной даты:
```
$date = "2022-01-01";
if (isset($names[$date])) {
    echo $names[$date];
} else {
    echo "Для этой даты нет ФИО";
}
```

Если есть вероятность появления даты, которой нет в массиве, можно использовать цикл для вывода всех значений:
```
foreach($names as $date => $name) {
    echo $name . "<br>";
}
```

Таким образом, можно избежать дублирования имен на конкретные даты и обрабатывать возможные отсутствующие даты в других циклах.
<?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;
    }
}
Похожие вопросы