【发布时间】:2017-04-27 04:57:12
【问题描述】:
我目前有一个对象数组,如下所示:
$aa = new StdClass;
$aa->name = 'aa';
$aa->index = 30;
$bb = new StdClass;
$bb->name = 'bb';
$bb->index = 30;
$cc = new StdClass;
$cc->name = 'cc';
$cc->index = 10;
$dd = new StdClass;
$dd->name = 'dd';
$dd->index = 20;
$ee = new StdClass;
$ee->name = 'ee';
$ee->index = 10;
我已将我的对象放入一个数组中进行排序:
$arr = [$aa, $bb, $cc, $dd];
我还有一个额外的数组,我想将其用于在索引处按顺序对对象进行排序,例如$aa->index:
$map = [30, 20, 10, 10, 30];
预期的结果是:
[$aa, $dd, $cc, $ee, $bb]
$aa 和 $bb 中的另一个是未定义的,它们不能重复,所有索引都必须分配到某个地方。
按照$map 设置的顺序排列$arr 的最佳方式是没有使用foreach() 循环吗?
【问题讨论】:
-
如何判断第一个索引 -
30- 是指对象$aa还是$bb? -
@JiriHrazdil 随机,我想
-
举个例子 -
[$aa, $dd, $cc, $cc, $aa]是正确的输出吗? -
不,应该是 [$aa, $dd, $cc, $ee, $bb] 或者类似的。没有重复
-
这不是重复的,在这种情况下使用 array_search 将不起作用,因为引用 $order(或在这种情况下为 $map)具有重复的值,来自原始数组的所有对象都具有相同的索引属性无论在 $order 或 $map 中的位置如何,都会一个接一个地排序。