Задать вопрос

Обработка json запроса в php?

Привет всем. Наверное я уже пересидел за проектом, но споткнулся на одной вещи.
Форма отправляет строку в формате json
[0: {user: 1; numflow: 1}, 1:{user: 2; numflow: 2} и т.д.]


Принимаю в контроллере (знаю, что нужно делать в моделе, хочу разобраться, а потом уже выносить в модель)

public static function SaveFlow(Request $request){
        $fnumber = 0; // очередь
        $i = 0;

        $num = array($request->all());

        foreach ($num as $u) {

            if(is_array($num)){

                $fnumber++;

                $user = User::find($u[$i]['id']);
                $user->numflow = $u[$i]['numflow'];
                $user->save();

                $i++;
                }
        }


    }


Получаю ошибку
local.ERROR: Undefined offset: 0

Пробовал ставить json_decode(), так появляется ошибка json_decode() expects parameter 1 to be string, array given

Пожалуйста, тыкните носом как котенка, что я делаю не так?

Заранее благодарю за ответ.

UPD

Решил проблему. Так как был многомерный массив, нужно было сделать вложенные циклы foreach

$number = 0; // очередь

            $num = $value;

            foreach ($num as $u) {
                if(is_array($u)){

                    foreach ($u as $key => $value2){

                        foreach ($value2 as $key2 => $item) {
                            $number++;

                            $user = User::find($item);
                            $user->numflow = $number;
                            $user->save();

                        }

                    }
                }

            }
  • Вопрос задан
  • 802 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@php_raper
1. Вам не нужно делать итерацию, уберите из вашего скрипта $i
foreach ($num as $u) {

            if(is_array($num)){
 
                $user = User::find($u->id);
                $user->numflow = $u->numflow;
                $user->save();
                }
        }


Так должно работать, ваш $request->all() - должен вернуть объект, проверьте через
dd($request->all())

Json - это объект, а не массив, чтобы работать с объектом нужно использовать оператор $objname->key
где key - это ключ
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@aywan
Универсальная не боевая единица
User::find($u[$i]['id']); -> Здесь $u уже элемент из $num, то есть ['user'=>1, 'numFlow'=>1]. Не надо $u[$i], а сразу $u['user']
Ответ написан
Комментировать
@kastembay Автор вопроса
Русич
Ошибка - local.ERROR: Undefined index: id

dd($request->all()) выводит
array:2 [▼
  "_token" => "dXOYleK8Ev0b51JgnGjVrCLk9Xj8W2Lkto2gKB4w"
  "data" => array:3 [▼
    0 => array:2 [▼
      "id" => "3"
      "numflow" => "1"
    ]
    1 => array:2 [▼
      "id" => "4"
      "numflow" => "2"
    ]
    2 => array:2 [▼
      "id" => "6"
      "numflow" => "3"
    ]
  ]
]


Убрал итерацию, но ошибка все равно присутствует Trying to get property 'id' of non-object

Что-то я вообще не понимаю(((
Ответ написан
@vism
array($request->all());
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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