这是数组的简化版本。很容易通过'id'或'created_by'对它进行排序,但是我很难弄清楚如何通过'elements'中的“e5e53240-1d5a-4b50-ad7d-cfa00f33badd”的值来对其进行排序宾语。我花了几个小时搜索其他问题试图解决这个问题,但没有运气。
所以这是通过print_r的数组的简化版本:
[0] => stdClass Object
(
[id] => 12
[created_by] => 776
[searchable] => 1
[elements] => {
"b2c4ecaa-f68f-4a5c-a551-339aa8f01421": {
},
"e5e53240-1d5a-4b50-ad7d-cfa00f33badd": {
"0": {
"value": "Aeronca"
}
},
"d7c903a8-fa15-4620-9d9b-2238cb48fd5c": {
"0": {
"value": "L-3B"
}
}
)
[1] => stdClass Object
(
[id] => 21
[created_by] => 776
[searchable] => 1
[elements] => {
"b2c4ecaa-f68f-4a5c-a551-339aa8f01421": {
},
"e5e53240-1d5a-4b50-ad7d-cfa00f33badd": {
"0": {
"value": "BEECHCRAFT"
}
},
"d7c903a8-fa15-4620-9d9b-2238cb48fd5c": {
"0": {
"value": "N-35"
}
}
)
[2] => stdClass Object
(
[id] => 13
[created_by] => 776
[searchable] => 1
[elements] => {
"b2c4ecaa-f68f-4a5c-a551-339aa8f01421": {
},
"e5e53240-1d5a-4b50-ad7d-cfa00f33badd": {
"0": {
"value": "AEROSPORT"
}
},
"d7c903a8-fa15-4620-9d9b-2238cb48fd5c": {
"0": {
"value": ""
}
}
)
所以基本上数组在排序时应该让第一个元素在现在的位置,然后是第三个元素,接着是第二个元素,所以它看起来像这样:
[0] => stdClass Object
(
[id] => 12
[created_by] => 776
[searchable] => 1
[elements] => {
"b2c4ecaa-f68f-4a5c-a551-339aa8f01421": {
},
"e5e53240-1d5a-4b50-ad7d-cfa00f33badd": {
"0": {
"value": "Aeronca"
}
},
"d7c903a8-fa15-4620-9d9b-2238cb48fd5c": {
"0": {
"value": "L-3B"
}
}
)
[1] => stdClass Object
(
[id] => 13
[created_by] => 776
[searchable] => 1
[elements] => {
"b2c4ecaa-f68f-4a5c-a551-339aa8f01421": {
},
"e5e53240-1d5a-4b50-ad7d-cfa00f33badd": {
"0": {
"value": "AEROSPORT"
}
},
"d7c903a8-fa15-4620-9d9b-2238cb48fd5c": {
"0": {
"value": ""
}
}
)
[2] => stdClass Object
(
[id] => 21
[created_by] => 776
[searchable] => 1
[elements] => {
"b2c4ecaa-f68f-4a5c-a551-339aa8f01421": {
},
"e5e53240-1d5a-4b50-ad7d-cfa00f33badd": {
"0": {
"value": "BEECHCRAFT"
}
},
"d7c903a8-fa15-4620-9d9b-2238cb48fd5c": {
"0": {
"value": "N-35"
}
}
)
请记住,实际的数组要复杂得多,并且在数组中包含接近1,000个元素,所以希望我使用的任何方法都可以最大限度地减少服务器上的负载。
答案 0 :(得分:0)
您想要创建自己的比较器功能并使用usort进行排序。
例如:
function myComparator($a, $b) {
return $a->someValue - $b->someValue;
}
php.net中解释的返回值:
比较函数必须返回小于,等于或的整数 如果第一个参数被认为是大于零 分别小于,等于或大于第二个。
在代码中您要对数组进行排序的位置:
usort($arrayOfObjects, 'myComparator');
答案 1 :(得分:0)
像这样解码json并创建一个关键数组。然后使用键数组和array_multisort()按您想要的顺序排序:
foreach($object as $k => $o) {
//PHP 5.4.0
//$key[$k] = json_decode($o->elements, true)['e5e53240-1d5a-4b50-ad7d-cfa00f33badd'][0]['value'];
$elements = json_decode($o->elements, true);
$key[$k] = $elements['e5e53240-1d5a-4b50-ad7d-cfa00f33badd'][0]['value'];
}