Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Обновить массив массивом
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Обновить массив массивом

Страниц (1): [1]
 

1. pantela - 08 Января, 2018 - 01:57:42 - перейти к сообщению
Здраст
Как через 2 JSON найти значения по ключу и заменить другое значение..?
т.е.
Цитата:
[
{
id:"1",
pref:"AF",
Code:"100",
capacity: "120"
},
{
id:"2",
pref:"AL",
Code:"200",
capacity: "75"
},
{
id:"3",
pref:"DZ",
Code:"300",
capacity: "220"
},
{
id:"4",
pref:"AS",
Code:"400",
capacity: "20"
},
{
id:"5",
pref:"AD",
Code:"500",
capacity: "80"
},
]

Как можно по этому JSON массиву обновить "Code"-ы по "pref"?
update Code where pref == {...}

Второй массив тоже виде :
Цитата:
{
id:"4",
pref:"AS",
Code:"200"
},
{
id:"5",
pref:"AD",
Code:"300"
},


Наверное надо http://php.net/manual/ru/functio...array-values.php Как ...?
Спасибо.
2. Строитель - 08 Января, 2018 - 16:46:24 - перейти к сообщению
pantela, вложенные циклы + условие:
Спойлер (Отобразить)
3. pantela - 12 Января, 2018 - 21:16:29 - перейти к сообщению
А как можно merge сделать что бы результат был бы

PHP:
скопировать код в буфер обмена
  1. {
  2. id:"4",
  3. pref:"AS",
  4. Code:"100",
  5. Code_Edit:"200"
  6. },
  7. {
  8. id:"5",
  9. pref:"AD",
  10. Code:"200",
  11. Code_Edit:"300"
  12. }


Я понимаю что внутри foreach надо сделать присваивание Code_Edit = $a_2['pref'] и наверное на выходе сделать...

Спасибо.
4. Строитель - 12 Января, 2018 - 21:49:53 - перейти к сообщению
pantela, мне не понятно, с чем мержить, с предыдущим значением Code + 100 (что следует из вашего результирующего массива)? Тогда при чём тут $a_2['pref'], если в нём хранится нечто вроде AS, AD, и т.п.? Если нужно добавить ключ Code_Edit, со значением Code + 100, при условии что значение "pref" из первого массива будет равно значению "pref" во втором массиве, то можно просто дописать в условие выражение:
Спойлер (Отобразить)
5. pantela - 13 Января, 2018 - 09:27:25 - перейти к сообщению
Ой ступил имел виду "Code_Edit = $a_2['Code']", и в итоге

$array = json_decode($json_1, true);

PHP:
скопировать код в буфер обмена
  1. foreach ($array as &$a_1) {
  2.     foreach (json_decode($json_2, true) as $a_2) {
  3.         if ($a_1['pref'] == $a_2['pref']) {
  4.             $a_1['Code'] = $a_1['Code'];
  5.             $a_1['Code_Edit'] = $a_2['Code'];
  6.         }
  7.     }
  8. }
  9.  
  10. unset($a_1);
  11. var_dump($array);


Но я имел виду без foreach сделать мердже.
Спасибо.
6. Строитель - 13 Января, 2018 - 13:29:30 - перейти к сообщению
pantela,
Спойлер (Отобразить)
?
7. pantela - 18 Января, 2018 - 01:29:11 - перейти к сообщению
Вроде то что надо, только что мне делать если в json_2 у меня нету включа id, как его захватывать в результате из json_1.
т.е. тут мне чисто надо json_1 только Code обновить, остальное оставить как есть.
Закатив глазки

Update: т.е. если в json_1, напр. есть ключь "capaticy", тогда его тоже надо выводить при merge масивов? сейчас он исключается из-за того что в json_2 его нету.
8. Строитель - 18 Января, 2018 - 19:52:39 - перейти к сообщению
pantela пишет:
Update: т.е. если в json_1, напр. есть ключь "capaticy", тогда его тоже надо выводить при merge масивов? сейчас он исключается из-за того что в json_2 его нету.
Спойлер (Отобразить)
9. pantela - 18 Января, 2018 - 22:57:03 - перейти к сообщению
Я сделал так на сколько правельно
Спойлер (Отобразить)


По идее тут merge не нужен, т.е. перазапись всё равно остаётся.
Спасибо.
10. Строитель - 18 Января, 2018 - 23:29:57 - перейти к сообщению
pantela, ну вам ведь видней, что должно быть в результате Закатив глазки

 

Powered by ExBB FM 1.0 RC1