2017-09-14 47 views
1

我想基于特定关键字排序第二级值。在这种情况下,该关键字是red基于关键字排序第二级数组值

如果我检查回调函数中的步骤似乎工作,但最终结果是不变的。它还按字母顺序排列顶级键。如预期,因为只有uasort()排序您传递给它的第一个参数,第一级阵列($数据)数组

$data = array(
    'foo' => array(
     'red', 'green' 
    ), 
    'bar' => array(
     'yellow', 'red' 
    ), 
); 

print_r($data); 

uasort($data, function($data) { 
    $matches = preg_grep("/red/", $data); 

    $rest = array_diff($data, $matches); 

    $order = array_merge($matches, $rest); 

    return $order; 

}); 

print_r($data); 

回答

2

您的代码不起作用。尽管运行和语法正确,其余的代码也无济于事。

这里是一个工作示例:

$data = array(
    'foo' => array(
     'red', 'green' 
    ), 
    'bar' => array(
     'yellow', 'red' 
    ), 
); 

array_walk($data,function(&$v){ 
    uasort($v,function($a,$b){ 
     return preg_match('/red/',$a)?-1:1; 
});}); 

print_r($data); 
  • array_walks()通过第一级阵列迭代。
  • uasort()在回调中提供,并处理二级数组的排序部分。
  • 然后preg_match()用于匹配字符串并返回一个适合于在回调中重新排序的值uasort()
相关问题