Поиск в многомерном массиве и изменение значения одного ключа

0

У меня есть один запрос json, который содержит несколько массивов:

{
  "user_type": "2",
  "user_id": "57",
  "client_detail": [
    {
      "server_user_id": "1",
      ........
      ........
      "is_active": "1",
      "client_local_id": "11"
    },
    {
      "server_user_id": "2",
      ........
      ........
      "is_active": "1",
      "client_local_id": "12"
    }
  ], 
  }

Используя вышеуказанный запрос, я изменяю данные в базу данных. затем возвращать данные из БД. но я должен передать client_local_id в ответ.

так что предположим, что я получил 3 результата из БД, тогда мне нужно вернуть client_local_id (это поле не хранится в БД, нет необходимости в этом) с ними. поэтому я передаю default client_local_id 0.

экс:

"client_detail": [
{
  "server_user_id": "1",
  ........
  ........
  "is_active": "1",
  "client_local_id": 0
},
{
  "server_user_id": "2",
  ........
  ........
  "is_active": "1",
  "client_local_id": 0
},
{
  "server_user_id": "3",
  ........
  ........
  "is_active": "1",
  "client_local_id": 0
},
]

затем, используя нижеприведенный код i, измените значение client_local_id.

    $response = array('client_detail' => $dbvalue);
    /* Change Client Local ID */
    if(sizeof($client_detail_data)>0)
    {
        foreach($client_detail_data as $key=>$resclient_data)  // loop of request
        {
            foreach($response['client_detail'] as $key1=>$res_client)  //loop of response
            {
                //if id is match then change value
                if($res_client['server_user_id']==$resclient_data['server_user_id'])
                {
                    $response['client_detail'][$key1]['client_local_id'] = $resclient_data['client_local_id'];
                }
            }
        }
    }

Но я думаю, что есть простой способ, чтобы сделать это. У меня есть несколько массивов в запросе, поэтому я не хочу использовать слишком много циклов foreach. так как решить его должным образом?

Заранее спасибо.

Теги:

1 ответ

1
Лучший ответ

Прежде всего, давайте сопоставьте server_user_id с client_user_id s:

$s2c = array();
foreach($resclient_data as $item) {
  $s2c[$item['server_user_id']] = $item['client_user_id'];
}

Теперь мы можем использовать array_map непосредственно на $response:

$response['client_detail'] = array_map(function($elem) use($s2c) {
  $elem['client_local_id'] = $s2c[$elem['server_local_id']];
  return $elem;
}, $response['client_detail']);

Я проверяю код, но, надеюсь, идея понятна.

  • 0
    Спасибо @mudasobwa, я получил свой ответ. но я не могу получить значение массива $ s2c внутри array_map. Чтобы решить эту проблему, я должен использовать global внутреннюю функцию.
  • 0
    Это зависит от областей, в которых эти функции объявлены. Если вы используете их один за другим, вам лучше use ключевое слово вместо глобального. Просьба посмотреть обновленный ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню