根据php中的单个键:值对对对一组数组进行排序


Sort a set of arrays based on a single key:value pair in php

发现一个问题已经解释了这一点-如何在PHP中根据给定键的值对关联数组数组进行排序?

我有一个数组(A2)的数组(A1)。我想根据A2 中的键:值对对对A1中的所有A2进行排序

结构类似于

A1
->A2-1
  ->K1:Some Value
  ->K2:ValB
->A2-2
  ->K1:Other Value
  ->K2:ValB1
->A2-3
  ->K1:Some Value
  ->K2:ValB2
->A2-4
  ->K1:Other Value
  ->K2:ValB3

我想对A1中的数组进行排序,使K1的值为"其他值"的所有A2聚在一起,使K1值为"某个值"的全部A2聚在一起来

因此,在排序之后,A1中的阵列的最终顺序应该是A2-2、A2-4、A2-1、A2-3。PHP中有没有一个函数可以用来实现这一点?还是我必须解析整个数组并进行排序?

谢谢。

http://php.net/manual/en/function.array-multisort.php如果这不合适,还有很多其他的数组函数http://www.php.net/manual/en/ref.array.php

试试:

$A1 = array(
  'A2-1' => array(
    'K1' => 'Some Value',
    'K2' => 'ValB',
  ),
  'A2-2' => array(
    'K1' => 'Other Value',
    'K2' => 'ValB1',
  ),
  'A2-3' => array(
    'K1' => 'Some Value',
    'K2' => 'ValB2',
  ),
  'A2-4' => array(
    'K1' => 'Other Value',
    'K2' => 'ValB3',
  )
);
function mySort($a, $b) {
    if ($a['K1'] == $b['K1']) {
        return strcmp($a['K2'], $b['K2']);
    } else {
        return strcmp($a['K1'], $b['K1']);
    }
}
uasort($A1, 'mySort');
print_r($A1);

输出:

Array
(
    [A2-2] => Array
        (
            [K1] => Other Value
            [K2] => ValB1
        )
    [A2-4] => Array
        (
            [K1] => Other Value
            [K2] => ValB3
        )
    [A2-1] => Array
        (
            [K1] => Some Value
            [K2] => ValB
        )
    [A2-3] => Array
        (
            [K1] => Some Value
            [K2] => ValB2
        )
)

您需要类似以下内容:

usort($array, function($a, $b)
{
  return strcmp($a['k1'], $b['k1']);
});

您可能需要用不同的排序函数(或运算符)替换strcmp,因为不清楚您到底在做什么。

strategy: 
1.  find unique values, put them aside. 
2.  loop through unique values 
2.1     loop origial array 
2.2        store sub array in $out if unique val = original val

    <?php
    $i=0;
    $a3d = array(
        $i++ => array(0=>'Some Value',1=>'ValB'),
        $i++ => array(0=>'Other Value',1=>'ValB1'),
        $i++ => array(0=>'Some Value',1=>'ValB2'),
        $i++ => array(0=>'Zome moar',1=>'ValB4'),
        $i++ => array(0=>'Other Value',1=>'ValB3'),
        $i++ => array(0=>'Zome Moar',1=>'ValB4'),
    );
    print_r($a3d);
    foreach ($a3d as $a2d){
        $uniq[]= $a2d[0];
    }
    $uniq = array_unique($uniq);
    sort($uniq);
    print_r($uniq);
    foreach ($uniq as $v){
        foreach ($a3d as $kk => $a2d){
            if ($a2d[0] == $v){
                $out[]= $a2d;
                unset($a3d[$kk]); // <--avoid rechecking elements
            }
        }
    }
    print_r(count($a3d));
    print_r($out);
    ?>
$ php sort_array.php 
    Array
    (
        [0] => Array
            (
                [0] => Some Value
                [1] => ValB
            )
        [1] => Array
            (
                [0] => Other Value
                [1] => ValB1
            )
        [2] => Array
            (
                [0] => Some Value
                [1] => ValB2
            )
        [3] => Array
            (
                [0] => Zome moar
                [1] => ValB4
            )
        [4] => Array
            (
                [0] => Other Value
                [1] => ValB3
            )
        [5] => Array
            (
                [0] => Zome Moar
                [1] => ValB4
            )
    )
    Array
    (
        [0] => Other Value
        [1] => Some Value
        [2] => Zome Moar
        [3] => Zome moar
    )
    0Array
    (
        [0] => Array
            (
                [0] => Other Value
                [1] => ValB1
            )
        [1] => Array
            (
                [0] => Other Value
                [1] => ValB3
            )
        [2] => Array
            (
                [0] => Some Value
                [1] => ValB
            )
        [3] => Array
            (
                [0] => Some Value
                [1] => ValB2
            )
        [4] => Array
            (
                [0] => Zome Moar
                [1] => ValB4
            )
        [5] => Array
            (
                [0] => Zome moar
                [1] => ValB4
            )
    )