Предположим, что данные 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"}
}';
Мне нужно сгруппировать массив в «Статус» конкретного человека. Например, ключ должен стать значением «Status», а id людей внутри массива — его значением.
$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);
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);
Вот одно решение только если вы используете 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
не уникальны. Это приведет к тому, что значения будут перезаписаны, поэтому в результирующем массиве будет только два элемента. Вы можете увидеть разницу между моя версия а также ваше требование