Сгруппировать данные JSON по определенному ключу

0

Предположим, что данные JSON подобны

$string = '{
"John": {
    "status":"Wait",
    "id":"001"
},
"Jennifer": {
    "status":"Active",
    "id":"002"
},
"James": {
    "status":"Active",
    "age":56,
    "count":10,
    "progress":0.0029857,
    "bad":0,
    "id":"003"
},
 "Adam": {
    "status":"Wait",
    "age":71,
    "count":10,
    "progress":0.0029857,
    "bad":0,
    "id":"004"
}
}';

Мне нужно сгруппировать массив в "Статус" конкретного человека. Как ключ должен стать значением "Состояние" и идентификатором лиц внутри массива как его значением.

  • 0
    Так что вы пробовали?
Теги:
arrays
grouping

3 ответа

1
$jsonData = json_decode($YourJson, true);

$resultArr = array();
foreach($jsonData as $person => $value) {
    foreach($value as $key => $val) {
        $k                         = $value['status'];
        $i                          = $value['id'];
        $resultArr[$k][$i]['name'] = $person;
        $resultArr[$k][$i][$key]   = $val;
    }
}

print "<pre>";
print_r($resultArr);
0
I gone through that deep and found the answer for that.. 


$result = array();
foreach($json_a as $person => $value)
{
      foreach($value as $key => $personal)
    {
          $key_s = $value['status'];
          $id_s =  $value['id'];
        $result[$key_s][$id_s]['name'] = $person;
        $result[$key_s][$id_s][$key] = $personal;

    }  
}


print "<pre>";
print_r($result);
0

Здесь одно решение, только если вы используете PHP> = 5.5

$json_string = '{
    "John": {
        "status":"Wait",
        "id":"001"
    },
    "Jennifer": {
        "status":"Active",
        "id":"002"
    },
    "James": {
        "status":"Active",
        "age":56,
        "count":10,
        "progress":0.0029857,
        "bad":0,
        "id":"003"
    },
    "Adam": {
        "status":"Wait",
        "age":71,
        "count":10,
        "progress":0.0029857,
        "bad":0,
        "id":"004"
    }
}';

$json_arr = json_decode($json_string, true);
$result = array_column($json_arr, 'status', 'id');

Примечание: обратите внимание, что я переключил значение и клавишу с нужного конечного результата, так как значения в status не уникальны. Это приведет к тому, что значения будут перезаписаны, поэтому в массиве результатов будет только два элемента. Вы можете видеть разницу между моей версией и вашим требованием

Ещё вопросы

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