Теперь вот два массива, которые у меня есть:
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:!
Привет и добро пожаловать в SO. Я предлагаю вам потратить немного времени, чтобы взять тур и прочитать страницу Как спросить. На этом сайте есть некоторые правила, которые помогают повысить качество контента и упрощают ответы на вопросы. В вашем случае вы должны были включить вашу попытку решения / поиска решения вашей проблемы в сам вопрос, поскольку вопросы, требующие написать для вас код, считаются на сайте не по теме. Удачи!
Фактически, я сделал цикл foreach для обоих массивов, затем сравнил его значение dayName, если оно совпадает, вставьте второе значение массива в первое.
Вопрос отредактирован.
Теперь я вижу твою правку. Вы хотите удалить ключи 0 и 1? Чем заменить 0 и 1? Так работают массивы.






Это даст вам желаемый результат ...
$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"
}
]
]
Он дает тот же результат, что и мой код, но оставляет ключ, я просто хочу удалить эти ключи, есть идеи об этом?
@JimKasprowicz Да, я понимаю, что вам сейчас нужно - обновили свой ответ :)
@JimKasprowicz также обновил улучшенный вывод json_encode для вашей проверки
@JimKasprowicz Я видел, что вы приняли мой ответ, а затем не приняли ... по какой-либо причине? Я дал то, о чем вы просили, верно?
Ах! Рад, что вы сейчас разобрались :)
Я думаю, это даст вам ожидаемый результат. Я использую 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);
Я вижу ссылку, которую вы предоставили. Но даже на странице ассоциативный массив имеет такие ключи, как [0] => и [1] =>. Я не хочу этого, я просто хочу это без этих ключей.
Это невозможно, как я писал в комментариях к вашему вопросу, именно так работают массивы. Кроме того, это противоположность ассоциативности, она индексируется.
Ага, ошибка моя, указатели, а не ассоциативны. Но спасибо за код. Я ценю это.
Если вы должны удалить их, вы можете использовать регулярное выражение, чтобы удалить их. См. «До и после»: 3v4l.org/4BWvt
@ Джим, почему вы пытаетесь удалить что-то, что является частью стандартов массивов? В чем разница? Когда вы json_decode кодируете строку без 0 и 1, PHP все равно их создаст.
Когда вы говорите, что не работает, какие не работает? Вы что-нибудь пробовали?