Php 基于关键字对二级数组值进行排序

Php 基于关键字对二级数组值进行排序,php,arrays,sorting,Php,Arrays,Sorting,我试图根据特定关键字对第二级值进行排序。在这种情况下,关键字是红色的 如果我检查回调函数中的步骤,它似乎可以工作,但最终结果不变。它还按字母顺序对顶级键进行排序 $data = array( 'foo' => array( 'red', 'green' ), 'bar' => array( 'yellow', 'red' ), ); print_r($data); uasort($data, function($da

我试图根据特定关键字对第二级值进行排序。在这种情况下,关键字是红色的

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

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

您的代码无法正常工作,因为
uasort()
仅对您在第一个参数(第一级数组($data))中传递给它的数组进行排序。代码的其余部分虽然正在运行且语法正确,但也没有帮助

以下是一个工作示例:

$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()
    回调中重新排序的值