1 / 1 / 1
Регистрация: 26.02.2012
Сообщений: 76
1

Сравнение двух многомерных массивов по ключам

20.11.2018, 20:26. Показов 2238. Ответов 3

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Есть такая задача.
Массив 1
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    array(2) {
  [2018]=>
  array(1) {
    [12]=>
    array(1) {
      [31]=>
      string(6) "booked"
    }
  }
  [2019]=>
  array(1) {
    ["01"]=>
    array(2) {
      ["01"]=>
      string(6) "booked"
      ["02"]=>
      string(6) "booked"
    }
  }
}
Массив 2

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    [2018] => Array
        (
            [11] => Array
                (
                    [22] => changeover-start
                    [23] => booked
                    [24] => booked
                    [20] => changeover-start
                    [25] => changeover-end
                    [21] => changeover-end
                )
 
            [12] => Array
                (
                    [28] => changeover-start
                    [29] => booked
                    [30] => booked
                    [31] => booked
                )
 
        )
 
    [2019] => Array
        (
            [1] => Array
                (
                    [1] => booked
                    [2] => changeover-end
                )
 
        )

Задача, отфильтровать данные так, чтоб на выходе получить true/false, если индекса из первого значения, нету во втором, тогда значение (true). Например, в этом примере будет false, так как [2018][12][31] есть во втором массиве.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2018, 20:26
Ответы с готовыми решениями:

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

Сравнение многомерных массивов... Необходима свежая идея
есть StringGrid размеров n на m, над этим всем безобразим в течении долгого времени совершается...

Приложение представляющее организацию многомерных вычислений многомерных массивов
Разработать приложение для Windows, представляющую организацию многомерных вычислений многомерных...

Сравнение двух массивов
Всем привет возникла проблема. Есть три массива А, В и С. Массивы А и В задаются пользователем,...

3
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
21.11.2018, 12:10 2
Все ключи надо проверять?
0
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
21.11.2018, 12:19 3
Victoria_Orel, если совпадения по уровню вложенности не важны, то схлопываем многомерный массив в одномерный и смотрим совпадения по ключу. Например так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$arr1 = [10 => '145',20 => 'jvhghh',30 => [4580 => 'hghgh', 7845780 => 'hghhgh', 777770 => [44440 => 'jhghgh', 11111 => '254']]];
$arr2 = [1 => '145',2 => 'jvhghh',3 => [458 => 'hghgh', 784578 => 'hghhgh', 77777 => [4444 => 'jhghgh', 11111 => '254']]];
 
function multiArrayFlip($arr){
    global $arr_glob;
    foreach ($arr as $k => $v){
        if (is_array($v)){
            multiArrayFlip($v);
        }
        $arr_glob[$k]=true;
    }
    return $arr_glob;
}
 
 
$arr_glob=[];
$flip_arr1 = (multiArrayFlip($arr1));
 
$arr_glob=[];
$flip_arr2 = (multiArrayFlip($arr2));
 
if(array_intersect_key($flip_arr1, $flip_arr2)){
    echo 'Совпадения найдены!';
}else{
    echo 'Совпадения не найдены!';
}
0
1 / 1 / 1
Регистрация: 26.02.2012
Сообщений: 76
21.11.2018, 13:50  [ТС] 4
Решила задачу по другому.
Получаю диапазон дат введенных пользователем (Дата заезда, Дата выезда) Массив $arrData

PHP
1
2
3
4
5
6
7
8
9
10
11
$date1 = new DateTime($date_in);
    $date2 = new DateTime($date_out);
    // учитываем день завершения
    $date2->modify('+1 day');
 
    $period = new DatePeriod($date1, new DateInterval('P1D'), $date2);
 
    // диапазон дат от и до
    foreach ($period as $key => $value) {
        $arrData[] = $value->format('d.m.Y');
    }
Дальше получаю данные занятости из json, и перебираю даты из первого массива

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 $data_booking = json_decode($json_data, true);
 
                $busy = false;
 
                foreach ($arrData as $onedate) {
                    $date = DateTime::createFromFormat('d.m.Y', $onedate);
                    $year = $date->format('Y');
                    $month = $date->format('m');
                    // очищаем 0 с даты (json в формате без 0)
                    $month = ltrim($month, '0');
                    $day = $date->format('d');
                    // очищаем 0 с даты (json в формате без 0)
                    $day = ltrim($day, '0');
 
                    if ($data_booking[$year][$month][$day] !== null) {
                        $busy = true;
                        break;
                    }
                }
                //Если квартира свободна на ВСЕ выбранные даты
                if ($busy == false) :
                    // получаем ID-шки квартир, подходящие по условию выборки
                    $freeaptsIds[] = get_the_ID();
                endif;
За ваши решения спасибо.
0
21.11.2018, 13:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2018, 13:50
Помогаю со студенческими работами здесь

Сравнение двух массивов
Здравствуйте, как сравнить 2 вот таких, к примеру массива и узнать они идентичны или нет? ...

Сравнение двух массивов
Надо сравнить два массива вроде написал но не компилируется помогите! use16 org 100h S DB...

Сравнение двух массивов.
Вопрос такой ,как сравнить 2 массива, и если они равны, то в тест боксе писать текст. Использовал...

Сравнение двух массивов
Не могу найти решение не типовой задачи (а может и типовой, просто я этого не знаю). Есть массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru