mrusklon
@mrusklon
Не получается? Яростно гугли!

Как сравнить 2 многомерных массива и сохранить очередность?

Есть 2 массива
$result2:
array(29) {
  [0]=>
  array(5) {
    ["users_id"]=>
    string(2) "19"
    ["date"]=>
    string(10) "2020-04-01"
    ["user_id"]=>
    string(2) "19"
    ["sub_hours"]=>
    string(1) "8"
  }
  [71]=>
  array(5) {
    ["users_id"]=>
    string(3) "108"
    ["date"]=>
    string(10) "2020-04-02"
    ["user_id"]=>
    string(3) "108"
    ["sub_hours"]=>
    string(1) "8"
  }
  [139]=>
  array(5) {
    ["users_id"]=>
    string(2) "91"
    ["date"]=>
    string(10) "2020-04-03"
    ["user_id"]=>
    string(2) "91"
    ["sub_hours"]=>
    string(1) "8"
  }

и
$result_days:
array(202) {
  [0]=>
  array(3) {
    ["id"]=>
    string(3) "123"
    ["off_date"]=>
    string(10) "2019-04-27"
    ["off_id"]=>
    string(1) "1"
  }
  [1]=>
  array(3) {
    ["id"]=>
    string(3) "118"
    ["off_date"]=>
    string(10) "2019-04-28"
    ["off_id"]=>
    string(1) "0"
  }
  [2]=>
  array(3) {
    ["id"]=>
    string(3) "111"
    ["off_date"]=>
    string(10) "2019-04-29"
    ["off_id"]=>
    string(1) "0"
  }
  [3]=>
  array(3) {
    ["id"]=>
    string(3) "112"
    ["off_date"]=>
    string(10) "2019-04-30"
    ["off_id"]=>
    string(1) "0"
  }
  [4]=>
  array(3) {
    ["id"]=>
    string(3) "119"
    ["off_date"]=>
    string(10) "2019-05-01"
    ["off_id"]=>
    string(1) "0"
  }
  [5]=>
  array(3) {
    ["id"]=>
    string(3) "120"
    ["off_date"]=>
    string(10) "2019-05-05"
    ["off_id"]=>
    string(1) "0"
  }


я делаю таблицу в thead которой надо у дней которые совпадают в обоих массивах сделать выделение,
пытаюсь сделать так
foreach ($result_days as $dateUsers) {
            foreach ($result2 as $i2) {
                if ($dateUsers['off_date'] === $i2['date']) {
                    echo "<td class='vihodnoy'>" . $i2['date'] . "</td>";
                } else {
                    echo "<td class='obichniyDen'>" . $i2['date'] . "</td>";
                }
            }
        }

$dateUsers['off_date'] === $i2['date'] - не срабатывает и все дни идут в else , почему так?
Штука в том еще что надо все дни сохранить в порядке возрастания
  • Вопрос задан
  • 108 просмотров
Решения вопроса 2
@galaxy
По коду вообще непонятно, что с чем сравнивается. Если массивы находятся в переменных $result_days и $result2, то выведется ячейка для каждой пары элементов (т.е. общее количество ячеек будет равно произведению размеров массивов). Вряд ли вы это задумывали.

По основному вопросу: искать что-то в многомерном массиве без индексов малоприятно. Сделайте ключи в массиве, с которым вы сравниваете, например:
$result_days = [
  "2019-04-27" => [ "id" => "123", ... ],
  ...
];

foreach ($result2 as $i2) {
                if (array_key_exists($i2['date'], $result_days) {
...
Ответ написан
Соглашусь с оратором выше. Скорее всего вы перепутали массивы и не в там смотрите ключи. Перегоните массив в хэш-таблицы, типа так

$result2 = [
    '2020-04-01' => ['users_id' => 19],
    '2020-04-02' => ['users_id' => 133],
    ....
]


$result_days = [
    '2019-04-27' => [
        'id' => 1,
        'off_id' => 133,
    ],
    ....
]


А потом простым перебором проверяйте
foreach ($result2 as $day => $i2) {
    if (isset($result_days[$day])) {
        echo "<td class='vihodnoy'>" . $i2['date'] . "</td>";
    } else {
        echo "<td class='obichniyDen'>" . $i2['date'] . "</td>";
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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