搜索多维数组并更改一个键的值

时间:2015-01-07 11:01:56

标签: php

我有一个包含多个数组的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"
    }
  ], 
  }

使用上述请求我将数据更改为数据库。然后从DB返回数据。但我必须将client_local_id传递给回应。

所以假设我从DB得到3个结果然后我必须返回client_local_id(这个字段没有存储在DB中,没有必要)。所以我传递了默认的client_local_id 0.

EXA:

"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
},
]

然后使用下面的代码我改变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 个答案:

答案 0 :(得分:1)

首先让我们将server_user_id映射到client_user_id s:

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

现在我们可以直接在$response上使用array_map

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

我没有测试代码,但希望这个想法很明确。