基于其他数组更改JSON对象数组

时间:2013-11-20 10:22:24

标签: php arrays json

我有一个JSON对象数组,如下所示:

{"id":1,"place":2,"pic_name":"aaa.jpg"}

我的PHP文件收到一个简单的数组,如:

["4","3","1","2","5"]

这些数字对应于我的JSON对象中的位置值。现在我需要将secont数组中每个元素的位置与JSON对象中的ID值进行比较,如果匹配,我必须将PLACE的值替换为数组中的元素。 我在做比较时遇到了问题。任何准则?我想出了什么:

foreach($ids as $index=>$id) { //the array
$id = (int) $id;
foreach ($obj as $key=>$value) { //the JSON objects
  foreach ($value as $k=>$v){ 
  if ($id != '' && array_search($index, array_keys($ids)) == $value[$k]['id'])  {
      $value[$k]['place'] = $id;
      file_put_contents($file, json_encode($ids));
    } else { print "nope";}  
  }  }  }

1 个答案:

答案 0 :(得分:0)

那将是:

$array = [
'{"id":1,"place":2,"pic_name":"aaa.jpg"}',
'{"id":2,"place":5,"pic_name":"aab.jpg"}',
'{"id":3,"place":1,"pic_name":"aba.jpg"}',
'{"id":4,"place":3,"pic_name":"baa.jpg"}',
'{"id":5,"place":4,"pic_name":"abb.jpg"}'
];
$places = ["4","3","1","2","5"];

$array = array_map(function($item)
{
   return json_decode($item, 1);
}, $array);
foreach($array as $i=>$jsonData)
{
   if(false!==($place=array_search($jsonData['id'], $places)))
   {
      $array[$i]['place'] = $place+1;
   }
}
$array = array_map('json_encode', $array);
//var_dump($array);

- 输出如:

array(5) {
  [0]=>
  string(39) "{"id":1,"place":3,"pic_name":"aaa.jpg"}"
  [1]=>
  string(39) "{"id":2,"place":4,"pic_name":"aab.jpg"}"
  [2]=>
  string(39) "{"id":3,"place":2,"pic_name":"aba.jpg"}"
  [3]=>
  string(39) "{"id":4,"place":1,"pic_name":"baa.jpg"}"
  [4]=>
  string(39) "{"id":5,"place":5,"pic_name":"abb.jpg"}"
}