我从Laravel查询构建器获得了一系列对象:
[
{
"name": "John",
"code": "006"
},
{
"name": "James"
"code": "007"
},
{
"name": "Jone"
"code": "008"
}
]
我想把它变成这个:
[
"John" => "006",
"James" => "007",
"Jone" => "008"
]
答案 0 :(得分:3)
如果有数组:
\Illuminate\Support\Arr::pluck($array, 'code', 'name');
array_pluck($array, 'code', 'name');
如果您有收藏集:
$collection->pluck('code', 'name');
您可能还从查询中删除了
$query->pluck('code', 'name'); // instead of the `get` call
取决于Laravel版本,此方法可能是lists
Laravel 5.6 Docs - Helpers - array_pluck
答案 1 :(得分:2)
您可以尝试-
else
// decode the json
$data = json_decode($array, true);
$final = array_column($data, "code", "name");
将解码JSON字符串并返回数组。
array_column将返回提供的键的值。
答案 2 :(得分:1)
如果有多个同名的人,则不能使用array_combine。
此方法使用array_intersect来查找与名称匹配的代码,并在所有代码的每个名称上创建一个子数组。
$arr = json_decode($str, true);
$names = array_column($arr, "name");
$codes = array_column($arr, "code");
foreach(array_unique($names) as $name){
$new[$name] = array_intersect_key($codes, array_intersect($names, [$name]));
}
var_dump($new);
输出:
array(3) {
["John"]=>
array(2) {
[0]=>
string(3) "006"
[3]=>
string(3) "010"
}
["James"]=>
array(1) {
[1]=>
string(3) "007"
}
["Jone"]=>
array(1) {
[2]=>
string(3) "008"
}
}