首先介绍这个函数:
function arrayChangeKey($arr,$key)
{/*{{{*/
$processedArr = array();
if(is_array($arr) && !empty($arr)){
foreach ($arr as $item)
{
$processedArr[$item[$key]] = $item;
}
}
return $processedArr;
}
实例效果:
$list = '[
{
"name": "fhl",
"container_format": "bare",
"disk_format": "raw",
"checksum": null,
"id": "4bd3a29b-30fd-4cd6-a4e7-c707a74b3634",
"size": 53687091200
},
{
"name": "kvm_centos6.5_x86_64",
"container_format": "bare",
"disk_format": "raw",
"checksum": null,
"id": "ee7640cf-e199-4a7e-aaf7-ae223f458d9a",
"size": 53687091200
},
{
"name": "KVM centos 6.6 init 0.1",
"container_format": "bare",
"disk_format": "raw",
"checksum": null,
"id": "76573b95-7b68-402f-94ed-149ea1e2d5b5",
"size": 53687091200
}
]';
$list = json_decode($list, true);
print_r(arrayChangeKey($list, 'id'));
返回结果:
[4bd3a29b-30fd-4cd6-a4e7-c707a74b3634] => Array
(
[name] => fhl
[container_format] => bare
[disk_format] => raw
[checksum] =>
[id] => 4bd3a29b-30fd-4cd6-a4e7-c707a74b3634
[size] => 53687091200
)
[ee7640cf-e199-4a7e-aaf7-ae223f458d9a] => Array
(
[name] => kvm_centos6.5_x86_64
[container_format] => bare
[disk_format] => raw
[checksum] =>
[id] => ee7640cf-e199-4a7e-aaf7-ae223f458d9a
[size] => 53687091200
)
[76573b95-7b68-402f-94ed-149ea1e2d5b5] => Array
(
[name] => KVM centos 6.6 init 0.1
[container_format] => bare
[disk_format] => raw
[checksum] =>
[id] => 76573b95-7b68-402f-94ed-149ea1e2d5b5
[size] => 53687091200
)
}
有什么用处呢?
比如这样一个数据:
$item = '
{
"image": {
"id": "4bd3a29b-30fd-4cd6-a4e7-c707a74b3634"
},
"id": "6b0f"
}
';
我要将上面的item中的image的内容补充完整,根据id选择上面的数据,就直接可以避免foreach操作,。
$item = json_decode($item, true);
$item['image'] = $list[$item['image']['list']];
结果:
Array
(
[image] => Array
(
[name] => fhl
[container_format] => bare
[disk_format] => raw
[checksum] =>
[id] => 4bd3a29b-30fd-4cd6-a4e7-c707a74b3634
[size] => 53687091200
)
[id] => 6b0f
)