ddv88
@ddv88
Binance Futures

Сопоставление ключа и значения двух массивов?

Условно существует две таблицы:
1. С значениями дней недели.
2. С конкатенированными (string) значениями дней по id.
+----+---------------+          +-----+------------+
| id |    value      |          | ... |    days    |
+--------------------+          +------------------+
| 1  |  Понедельник  |          | ... |  1, 2, 3   |
| 2  |  Вторник      |          | ... |  5, 6, 7   |
| 3  |  Среда        |          +-----+------------+
| 4  |  Четверг      |
| 5  |  Пятница      |
| 6  |  Суббота      |
| 7  |  Воскресенье  |
+----+---------------+

В пых само собой выводятся как два ассоциативных массива.
Array (
  [0] => 
       [id] => 1,
       [value] => Понедельник
  [1] =>
       [id] => 2,
       [value] => Вторник
  [2] => 
       [id] => 3,
       [value] => Среда
  [3] =>
       [id] => 4,
       [value] => Четверг
  [4] =>
       [id] => 5,
       [value] => Пятница
  [5] => 
       [id] => 6,
       [value] => Суббота
  [6] =>
       [id] => 7,
       [value] => Воскресенье
)

Array (
  [0] => 
       [days] => 1, 2, 3
  [1] => 
       [days] => 5, 6, 7

)

Подскажите оптимальный способ для сопоставления данных значений в формате таблицы:
+---------------+---------+---------+---+---+---+---+
|  Понедельник  | Вторник |  Среда  | X | X | X | X |
+---------------+---------+---------+---------------+
| X | X | X | X | Пятница | Суббота |  Воскресенье  |
+---------------+---------+---------+---------------+


Желаемый результат получаю, но выглядит он громоздко через - explode, foreach, in_array и if.
Возможно ли это сделать с помощью MySQL или более элегантно в PHP без использования вложенного foreach?
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
daager
@daager
Не уверен, что правильно вас понял, но попробую тык
и продублирую:
$week_days=[
	1=>'Пн',
	2=>'вт',
	3=>'ср',
	4=>'чт',
	5=>'пт',
	6=>'сб',
	7=>'вс',
	];
 
	$days="123567";
	$days_arr=str_split($days,1);
 
 
	print_r(array_intersect_key($week_days,array_flip($days_arr)));

Array
(
    [1] => Пн
    [2] => вт
    [3] => ср
    [5] => пт
    [6] => сб
    [7] => вс
)


P.S. Вижу вы дополнили вопрос, тут мой ответ особо не поменяется. Просто $days_arr сделайте как массив с двумя вложенными массива и выполните код два раза. Думаю справитесь, направление я задал.
Ответ написан
Ваш ответ на вопрос

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

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