Слияние / вставка массивов не работает

Теперь вот два массива, которые у меня есть:

first one: 
"workingHours": [
                {
                    "opening": "09:30",
                    "closing": "13:30",
                    "dayName": "sunday"
                },
                {
                    "opening": "",
                    "closing": "",
                    "dayName": "monday"
                },
                {
                    "opening": "",
                    "closing": "",
                    "dayName": "tuesday"
                },
                {
                    "opening": "10:30",
                    "closing": "06:30",
                    "dayName": "wednesday"
                },
                {
                    "opening": "01:00",
                    "closing": "08:00",
                    "dayName": "thursday"
                },
                {
                    "opening": "",
                    "closing": "",
                    "dayName": "friday"
                },
                {
                    "opening": "",
                    "closing": "",
                    "dayName": "saturday"
                },
            ],
Second one: 
            "discount": [
                {
                    "from_time": "13:00:00",
                    "to_time": "14:50:00",
                    "discount": "20",
                    "dayName": "wednesday"
                },
                {
                    "from_time": "06:13:16",
                    "to_time": "04:14:11",
                    "discount": "20",
                    "dayName": "monday"
                },
                {
                    "from_time": "05:10:15",
                    "to_time": "06:10:17",
                    "discount": "20",
                    "dayName": "tuesday"
                },
                {
                    "from_time": "06:59:16",
                    "to_time": "04:19:11",
                    "discount": "20",
                    "dayName": "monday"
                }
            ],

Теперь мне нужен такой вывод:

Wanted Output: 
 "workingHours": {
    "opening": "",
    "closing": "",
    "dayName": "monday"
    {
        "from_time": "06:13:16",
        "to_time": "04:14:11",
        "discount": "20",
        "dayName": "monday"
    },
    {
        "from_time": "06:59:16",
        "to_time": "04:19:11",
        "discount": "20",
        "dayName": "monday"
    }
},
The output that is coming right now: 

"workingHours": [
                {
                    "opening": "09:30",
                    "closing": "13:30",
                    "dayName": "sunday"
                },
                {
                    "0": {
                        "from_time": "06:13:16",
                        "to_time": "04:14:11",
                        "discount": "20",
                        "dayName": "monday"
                    },
                    "1": {
                        "from_time": "06:59:16",
                        "to_time": "04:19:11",
                        "discount": "20",
                        "dayName": "monday"
                    },
                    "opening": "",
                    "closing": "",
                    "dayName": "monday"
                },
                {
                    "0": {
                        "from_time": "05:10:15",
                        "to_time": "06:10:17",
                        "discount": "20",
                        "dayName": "tuesday"
                    },
                    "opening": "",
                    "closing": "",
                    "dayName": "tuesday"
                },
                {
                    "0": {
                        "from_time": "13:00:00",
                        "to_time": "14:50:00",
                        "discount": "20",
                        "dayName": "wednesday"
                    },
                    "opening": "10:30",
                    "closing": "06:30",
                    "dayName": "wednesday"
                },
                {
                    "opening": "01:00",
                    "closing": "08:00",
                    "dayName": "thursday"
                },
                {
                    "opening": "",
                    "closing": "",
                    "dayName": "friday"
                },
                {
                    "opening": "",
                    "closing": "",
                    "dayName": "saturday"
                }
            ],

Вот мой код:


    foreach ($returnDataAns['workingHours'] as $key => $value) {
        # code...

        foreach ($returnDataAns['discount'] as $key2 => $value2) {
            # code...

            if ($value['dayName'] == $value2['dayName']) {
                # code...
                array_push($returnDataAns['workingHours'][$key], $value2);
            }

        }
    }

Есть идеи, как я могу это сделать? Я просто хочу удалить эти ключи 0: 1:!

Когда вы говорите, что не работает, какие не работает? Вы что-нибудь пробовали?

iainn 30.05.2018 11:46

Привет и добро пожаловать в SO. Я предлагаю вам потратить немного времени, чтобы взять тур и прочитать страницу Как спросить. На этом сайте есть некоторые правила, которые помогают повысить качество контента и упрощают ответы на вопросы. В вашем случае вы должны были включить вашу попытку решения / поиска решения вашей проблемы в сам вопрос, поскольку вопросы, требующие написать для вас код, считаются на сайте не по теме. Удачи!

Kaddath 30.05.2018 11:48

Фактически, я сделал цикл foreach для обоих массивов, затем сравнил его значение dayName, если оно совпадает, вставьте второе значение массива в первое.

Jim Kasprowicz 30.05.2018 11:48

Вопрос отредактирован.

Jim Kasprowicz 30.05.2018 11:52

Теперь я вижу твою правку. Вы хотите удалить ключи 0 и 1? Чем заменить 0 и 1? Так работают массивы.

Andreas 30.05.2018 12:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это даст вам желаемый результат ...

$arr1 = json_decode('[
        {
            "opening": "09:30",
            "closing": "13:30",
            "dayName": "sunday"
        },
        {
            "opening": "",
            "closing": "",
            "dayName": "monday"
        },
        {
            "opening": "",
            "closing": "",
            "dayName": "tuesday"
        },
        {
            "opening": "10:30",
            "closing": "06:30",
            "dayName": "wednesday"
        },
        {
            "opening": "01:00",
            "closing": "08:00",
            "dayName": "thursday"
        },
        {
            "opening": "",
            "closing": "",
            "dayName": "friday"
        },
        {
            "opening": "",
            "closing": "",
            "dayName": "saturday"
        }
    ]', true);

$arr2 = json_decode('[
        {
            "from_time": "13:00:00",
            "to_time": "14:50:00",
            "discount": "20",
            "dayName": "wednesday"
        },
        {
            "from_time": "06:13:16",
            "to_time": "04:14:11",
            "discount": "20",
            "dayName": "monday"
        },
        {
            "from_time": "05:10:15",
            "to_time": "06:10:17",
            "discount": "20",
            "dayName": "tuesday"
        },
        {
            "from_time": "06:59:16",
            "to_time": "04:19:11",
            "discount": "20",
            "dayName": "monday"
        }
    ]', true);

$finalArray = [];
foreach ($arr1 as $key => $day) {
    $subArray = [];
    foreach ($arr2 as $key2 => $dayData) {
        if ($day['dayName'] === $dayData['dayName']) {
            $subArray[] = $dayData;
        }
    }
    $finalArray[$key] = !empty($subArray) ? $finalArray[$key] = [$day, $subArray] : [$day];
}

echo '<pre>';
echo '$finalArray ' . print_r($finalArray, true);
echo '</pre>';
echo '<pre>';
echo '$finalArray json_encoded ' . print_r(json_encode($finalArray), true);
echo '</pre>';
exit;

Это даст вам следующую строку JSON из вывода json_encode:

[  
   [  
      {  
         "opening":"09:30",
         "closing":"13:30",
         "dayName":"sunday"
      }
   ],
   [  
      {  
         "opening":"",
         "closing":"",
         "dayName":"monday"
      },
      [  
         {  
            "from_time":"06:13:16",
            "to_time":"04:14:11",
            "discount":"20",
            "dayName":"monday"
         },
         {  
            "from_time":"06:59:16",
            "to_time":"04:19:11",
            "discount":"20",
            "dayName":"monday"
         }
      ]
   ],
   [  
      {  
         "opening":"",
         "closing":"",
         "dayName":"tuesday"
      },
      [  
         {  
            "from_time":"05:10:15",
            "to_time":"06:10:17",
            "discount":"20",
            "dayName":"tuesday"
         }
      ]
   ],
   [  
      {  
         "opening":"10:30",
         "closing":"06:30",
         "dayName":"wednesday"
      },
      [  
         {  
            "from_time":"13:00:00",
            "to_time":"14:50:00",
            "discount":"20",
            "dayName":"wednesday"
         }
      ]
   ],
   [  
      {  
         "opening":"01:00",
         "closing":"08:00",
         "dayName":"thursday"
      }
   ],
   [  
      {  
         "opening":"",
         "closing":"",
         "dayName":"friday"
      }
   ],
   [  
      {  
         "opening":"",
         "closing":"",
         "dayName":"saturday"
      }
   ]
]

Он дает тот же результат, что и мой код, но оставляет ключ, я просто хочу удалить эти ключи, есть идеи об этом?

Jim Kasprowicz 30.05.2018 12:10

@JimKasprowicz Да, я понимаю, что вам сейчас нужно - обновили свой ответ :)

ajmedway 30.05.2018 12:28

@JimKasprowicz также обновил улучшенный вывод json_encode для вашей проверки

ajmedway 30.05.2018 12:35

@JimKasprowicz Я видел, что вы приняли мой ответ, а затем не приняли ... по какой-либо причине? Я дал то, о чем вы просили, верно?

ajmedway 30.05.2018 12:38

Ах! Рад, что вы сейчас разобрались :)

ajmedway 30.05.2018 12:43

Я думаю, это даст вам ожидаемый результат. Я использую array_combine и array_column, чтобы сделать первый массив ассоциативным. Второй массив должен быть зациклен, чтобы создать массив, который можно объединить с первым массивом.

Наконец, я использую array_values, чтобы удалить ассоциативность.

foreach($discount as $val){
    $discount2[$val['dayName']][] = $val;
}  

$res = array_values(array_merge_recursive(array_combine(array_column($WH, "dayName"), $WH), $discount2));

var_dump($res);

https://3v4l.org/Q2fqe

Я вижу ссылку, которую вы предоставили. Но даже на странице ассоциативный массив имеет такие ключи, как [0] => и [1] =>. Я не хочу этого, я просто хочу это без этих ключей.

Jim Kasprowicz 30.05.2018 12:22

Это невозможно, как я писал в комментариях к вашему вопросу, именно так работают массивы. Кроме того, это противоположность ассоциативности, она индексируется.

Andreas 30.05.2018 12:23

Ага, ошибка моя, указатели, а не ассоциативны. Но спасибо за код. Я ценю это.

Jim Kasprowicz 30.05.2018 12:24

Если вы должны удалить их, вы можете использовать регулярное выражение, чтобы удалить их. См. «До и после»: 3v4l.org/4BWvt

Andreas 30.05.2018 12:28

@ Джим, почему вы пытаетесь удалить что-то, что является частью стандартов массивов? В чем разница? Когда вы json_decode кодируете строку без 0 и 1, PHP все равно их создаст.

Andreas 30.05.2018 12:35

Другие вопросы по теме