Php 对两个或多个数组进行排序和合并

Php 对两个或多个数组进行排序和合并,php,arrays,Php,Arrays,我有以下两个阵列: [BA] => Array ( [0] => Array ( [num] => 55 [val] => 1 ) [1] => Array ( [num] => 41 [val] => 5

我有以下两个阵列:

[BA] => Array
    (
        [0] => Array
            (
                [num] => 55
                [val] => 1
            )

        [1] => Array
            (
                [num] => 41
                [val] => 5
            )

        [2] => Array
            (
                [num] => 65
                [val] => 27
            )

        [3] => Array
            (
                [num] => 60
                [val] => 28
            )

        [4] => Array
            (
                [num] => 70
                [val] => 90
            )

        [5] => Array
            (
                [num] => 78
                [val] => 113
            )

        [6] => Array
            (
                [num] => 85
                [val] => 119
            )

    )



[GE] => Array
    (
        [0] => Array
            (
                [num] => 76
                [val] => 1
            )

        [1] => Array
            (
                [num] => 26
                [val] => 6
            )

        [2] => Array
            (
                [num] => 69
                [val] => 11
            )

        [3] => Array
            (
                [num] => 64
                [val] => 48
            )

        [4] => Array
            (
                [num] => 9
                [val] => 85
            )

        [5] => Array
            (
                [num] => 36
                [val] => 112
            )

        [6] => Array
            (
                [num] => 90
                [val] => 127
            )

    )
我需要按“val”对上述两个数组进行降序排序,并将它们合并为一个数组,如下所示:

 [new] => Array
        (
            [0] => Array
                (
                    [ruota] => 'GE'
                    [num] => 90
                    [val] => 127
                )

            [1] => Array
                (
                    [ruota] => 'BA'
                    [num] => 85
                    [val] => 119
                )

            [2] => Array
                (
                    [ruota] => 'BA'
                    [num] => 78
                    [val] => 113
                )

            [3] => Array
                (
                    [ruota] => 'GE'
                    [num] => 36
                    [val] => 112
                )

            [4] => Array
                (
                    [ruota] => 'BA'
                    [num] => 70
                    [val] => 90
                )

            [5] => Array
                (
                    [ruota] => 'GE'
                    [num] => 9
                    [val] => 85
                )

            [6] => Array
                (
                    [ruota] => 'GE'
                    [num] => 64
                    [val] => 48
                )

        )
拜托,有人能帮我吗?
提前非常感谢!:)

首先向每个数组添加密钥,例如:

foreach (array($ba, $ge) as &$array) {
  foreach ($array as $key => &$values) {
    foreach ($values as &$value) {
      $value['ruota'] = $key;
    }
  }
}
然后合并,例如:

$values = array_merge(array_values($ba), array_values($ge));
然后进行排序,例如:

usort($values, function($a, $b) {
  if ($a['val'] == $b['val']) {
        return 0;
  }
  return ($a['val'] < $b['val']) ? -1 : 1;
});
usort($value,function($a,$b){
如果($a['val']=$b['val']){
返回0;
}
报税表($a['val']<$b['val'])?-1:1;
});

注意:上面可能有一两个错误,但这应该会让您走上正确的道路。

这是一项非常简单的任务,可以通过简单的循环来完成(不要害怕循环)

步骤1:合并和填充阵列

// Merge Both arrays
$array = $ba + $ge; // or array_merge($ba,$ge);

// New Array
$new = [];

// Start Loop to pad array
foreach($array as $ruota => $var) {
    foreach($var as $v) {
        $v['routa'] = $ruota; // add routa to each element
        $new[] = $v;
    }
}
步骤2:排序和输出数组

// Sort Values
usort($new, function ($a, $b) {
    return $b['val'] - $a['val']; // Sort Decending
});

// Output Result
print_r($new);

应以何种方式合并它们,以使所需结果仅包含原始数据的一半?@Armali合并它们,按“val”排序,并仅返回前6个。您的意思是:前7个。@Armali是的,因为它是基于0的