Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用模板对数组进行排序_Php_Arrays - Fatal编程技术网

Php 使用模板对数组进行排序

Php 使用模板对数组进行排序,php,arrays,Php,Arrays,我有一个多维数组用作模板,然后是另一个具有混合值的多维数组。我曾尝试对混合数组进行排序,使其看起来像模板数组,但目前仍然没有成功 模板数组: $routes = [['A','B','C','D'],['A','C','E','F'],['D','O','A','F']] $points = [['C','A','A','B','C','C'], ['E','E','C','A'],['F','O','O','A','A']] 路由数组是模板数组。 我试过这样的方法: for ($i=0;$i

我有一个多维数组用作模板,然后是另一个具有混合值的多维数组。我曾尝试对混合数组进行排序,使其看起来像模板数组,但目前仍然没有成功

模板数组:

$routes = [['A','B','C','D'],['A','C','E','F'],['D','O','A','F']]
$points = [['C','A','A','B','C','C'], ['E','E','C','A'],['F','O','O','A','A']]
路由数组是模板数组。 我试过这样的方法:

for ($i=0;$i<=$idx;$i++) {
    $points1 = usort($points[$i], function($a, $b) use ($routes) {
        return array_search($a, $routes[$i]) - array_search($b, $routes[$i]);
    });        
}

对于($i=0;$i您应该使用
array\u keys
而不是
array\u search
并将当前处理的$point的键发送到回调:

$routes = [['A','B','C','D'],['A','C','E','F'],['D','O','A','F']];
$points = [['C','A','A','B','C','C'], ['E','E','C','A'],['F','O','O','A','A']];

foreach ($points as $key => &$point) {
  usort ($point, function ($a, $b) use ($key, $routes) {
    return array_keys($routes[$key], $a) > array_keys($routes[$key], $b);
  });
}

print_r($points);
输出:

Array
(
    [0] => Array
        (
            [0] => A
            [1] => A
            [2] => B
            [3] => C
            [4] => C
            [5] => C
        )

    [1] => Array
        (
            [0] => A
            [1] => C
            [2] => E
            [3] => E
        )

    [2] => Array
        (
            [0] => O
            [1] => O
            [2] => A
            [3] => A
            [4] => F
        )

)

不过你还没走那么远。

谢谢你的回复,但是代码还不太好。。它没有按要求排序结果。@rosuandreimihai呃,那么您可能需要添加一些您期望的输出的详细信息。你不想用相应的路线来点积分吗?是的,但是给我的结果看起来和你的不同:[[C'、'A'、'A'、'B'、'C'、'C']、[E'、'E'、'C'、'A']、[F'、'O'、'O'、'A']@rosuandreimihai你复制了和我完全相同的代码吗?是否将引用(
&
)包含在
$point
变量上?否则,它不会排序任何内容。这就是为什么会有一个不变的结果。@rosuandreimihai当然,使用array()而不是[]来初始化数组:
array(array('A','B','C','D'),array('A','C','E','F'),array('D','O','A','F')