根据关键字排序第二级数组值

时间:2017-09-14 23:41:35

标签: php arrays sorting

我尝试根据特定关键字对第二级值进行排序。在这种情况下,该关键字为red

如果我检查回调函数中的步骤似乎有效,但最终结果没有改变。它还按字母顺序对顶级键进行排序。

$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);

1 个答案:

答案 0 :(得分: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); 仅对您在第一个参数(第一级数组($ data)中传递给它的数组进行排序。其余的代码虽然在运行和语法上都是正确的,但也无济于事。

这是一个有效的例子:

uasort()
  • array_walks()遍历第一级数组。
  • uasort()在回调中提供,并处理二级数组的排序部分。
  • 然后使用
  • preg_match()来匹配字符串,并返回一个适合在回调中重新排序的值 <service>.hostname.com ,