我在PHP中有两个数组。第一个数组($ author_array)由特定顺序的user_ids组成,如下所示:(8,1,6)
第二个数组($ user_results)由一组对象组成,如下所示:
Array
(
[0] => stdClass Object
(
[ID] => 1
[user_login] => user1
)
[1] => stdClass Object
(
[ID] => 6
[user_login] => user6
)
[2] => stdClass Object
(
[ID] => 8
[user_login] => user8
)
)
我想“排序”第二个数组,使其按此顺序排列,它与第一个数组(8,1,6)中值的顺序相匹配。所以它看起来像这样:
Array
(
[0] => stdClass Object
(
[ID] => 8
[user_login] => user8
)
[1] => stdClass Object
(
[ID] => 1
[user_login] => user1
)
[2] => stdClass Object
(
[ID] => 6
[user_login] => user6
)
)
我在数据结构上很弱。我怎么能这样做? : - )
提前感谢您的帮助!
-Bob
答案 0 :(得分:29)
使用usort并提供自定义比较功能,该功能使用“排序”数组中键的位置来确定排序顺序,例如:类似的东西:
function cmp($a, $b)
{
global $author_array;
$pos1=array_search ($a->ID, $author_array);
$pos2=array_search ($b->ID, $author_array);
if ($pos1==$pos2)
return 0;
else
return ($pos1 < $pos2 ? -1 : 1);
}
usort($user_results, "cmp");
答案 1 :(得分:3)
我不确定这是否比其他示例慢得多,但似乎更简单。可能你可以将$ user_results数组构建为一个关联的数组,使用ID作为键,然后你可以轻松地进行查找。
$hash = array();
$result = array();
foreach ($user_results as $obj) {
$hash[$obj->ID] = $obj;
}
foreach ($author_array as $id) {
$result[] = $hash[$id];
}
答案 2 :(得分:1)
所以我遇到了类似的问题,但我试图通过数组(不是对象)来命令对象。这是不可能的,所以这是我的解决方法:
$sort_array= array(11, 4, 16, 19, 23);
$myobject = sort_categories($myobject)
function cmp($a, $b) {
if ($a->sort_key == $b->sort_key) { return 0; }
return ($a->sort_key < $b->sort_key) ? -1 : 1;
}
function sort_categories($obj) {
global $sort_array;
foreach($obj as $cat) {
$cat->sort_key = 999;
for ($i=0;$i<count($sort_array);$i++) {
if ($sort_array[$i] == $cat->term_id) $cat->sort_key = $i;
}
}
usort($obj,'cmp');
return $obj;
}
我正在查看对象并添加一个名为“sort_key”的新(属性?),我们将使用它来对usort()和cmp()进行排序。默认情况下,新的sort_key将为999,因此它最终会被卡住。
答案 3 :(得分:0)
public static function reorganizeBykey ($objects, array $keys){
$results = array();
foreach($keys as $key){
$i=0;
foreach($objects as $object){
if($object->sourceName==$key){
$results[$i] = $object;
}
$i++;
}
}
$others = (array_diff_assoc($objects,$results));
$results = array_merge($results,$others);
return $results;
}
我希望这会有所帮助 - 我必须使用它来按array()
对某些keys()
进行排序,然后追加最后不匹配的内容。