2017-04-23 53 views
1

我有什么,我想对它进行排序雄辩集合排序阵列传递回调

$sort =[ 
    3, 1, 2 
]; 

我想这样

$collection = [ 
    1 => [ 
     ... 
    ], 
    2 => [ 
     ... 
    ], 
    3 = [ 
     ... 
    ] 
]; 

和阵列的集合,以实现我怎么可以排序我的$collection像这样

$collection->sortBy(function($unit, $id) use ($sort) { 
    return ...; 
}) 

但代码不能算出它自己,我已经有工作examp le,在那里我只是foreach所有$ collection元素,并且通过我可以“正常”排序的方式为它们分配一些int,但是如果可以通过另一个数组进行排序而不向collection元素分配额外的键,它仍然很有趣。

回答

0

解决方案是

$sort 
    ->mapWithKeys(
     function($id) use ($collection) { 
      return [ 
       $id => $collection->get('id', $id) 
      ]; 
     } 
    ) 
2

你的意思是krsort

http://php.net/manual/en/function.krsort.php

krsort($collection); 
foreach ($collection as $key => $val) { 
    echo "$key = $val\n"; 
} 
+0

对不起,也许我的问题是有点困惑,但收集已经被关键字排序,我希望它被另一个数组,其中键会3,1,2排序,不是1,2,3 :) – MyMomSaysIamSpecial

+0

@Nerfair有任何你想要排序的条件吗? –

+0

什么样的集合将按$ sort数组ID排序 – MyMomSaysIamSpecial

1

Laravel藏品包括map()方法for.doing这样的事情。

https://laravel.com/docs/5.4/collections#method-map

它也可能是值得的mapWithKeys()方法看为好。

这些方法允许您传入一个集合并遍历它,将每次迭代传递给您定义的回调函数。