Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Sorting - Fatal编程技术网

Php 合并两个已排序的数组,结果数组也应进行排序

Php 合并两个已排序的数组,结果数组也应进行排序,php,arrays,sorting,Php,Arrays,Sorting,假设有两个数组,它们的结构相同,但数组数不同: $arr1 = array(array(1,"b"), array(2,"a"), array(5,"c")); $arr2 = array(array(3,"e")); 现在,$arr1和$arr2中的数据被排序,现在我希望它合并这两个数组,所以我这样做: $res = array_merge($arr1, $arr2); 然后我得到如下输出: 1-b 2-a 5-c 3-e 1-b 2-a 3-e 5-c

假设有两个数组,它们的结构相同,但数组数不同:

$arr1 = array(array(1,"b"), array(2,"a"), array(5,"c"));  
$arr2 = array(array(3,"e"));  
现在,$arr1和$arr2中的数据被排序,现在我希望它合并这两个数组,所以我这样做:

$res = array_merge($arr1, $arr2);  
然后我得到如下输出:

1-b  
2-a
5-c  
3-e  
1-b  
2-a
3-e  
5-c  
但是,我想有一个分类的$res也像这样:

1-b  
2-a
5-c  
3-e  
1-b  
2-a
3-e  
5-c  
我想知道PHP中是否有一个函数可以自动执行此操作,而不必编写自己的函数?或者,如果我想(稍后)按下一个参数添加排序,那么请告诉我哪种方法是最好的方法,以便输出如下

2-a  
1-b
5-c  
3-e  

感谢您的帮助。

为什么不在阵列合并后直接打电话?

您可以先合并阵列,然后对最终阵列进行排序

您可能正在寻找一个多排序函数。我通常使用此功能(几年前我在互联网上的某个地方发现了此功能,版权归原作者):


由于
PHPV5.3
可以更自然地使用anon函数

<?php

$arr1 = array(array(1,"b"), array(2,"a"), array(5,"c"));  
$arr2 = array(array(3,"e"));  


$res = array_merge($arr1, $arr2);  

usort($res, function($a,$b) {
  // php7
  // return $a[0] <=> $b[0];

  if ($a[0] == $b[0]) return 0; 
  return $a[0] < $b[0] ? -1 : 1;
});

print_r($res);

您可以使用下面的函数合并两个已排序的数组,而不使用array_merge()或sort()



合并后您需要求助,只需额外一行代码即可调用您的分拣路线。这并不意味着粗鲁,但我知道我必须做什么,只是不知道如何做,这是我首先要问的问题。所以,对不起,你一点也没帮上忙。哇!这真的很棒,正是我想要的。非常感谢你!然而,合并后的排序使这成为一个O(n log n)解决方案,其中正确的合并(如合并排序所使用的)是O(n)。我不知道我是否做错了什么,但我无法让它与ksort()一起工作。我得到与合并后相同的数组。菲格斯的回答正是我所需要的。Thx的答复。这是性能无知的解决方案。当然,对于任何短数组都可以。但是OP所询问的通常是以O(n)时间运行的,其中n是数组长度的总和。这只是因为您不需要在数据预排序时进行排序。正确的合并将是O(NM)。数组_合并+排序将为O(NM日志(NM))
Array
(
[0] => Array
    (
        [0] => 1
        [1] => b
    )

[1] => Array
    (
        [0] => 2
        [1] => a
    )

[2] => Array
    (
        [0] => 3
        [1] => e
    )

[3] => Array
    (
        [0] => 5
        [1] => c
    )

)
 <?php



$arr1 = [1,2,5,7,10,20,36,70,82,90];
$arr2 = [4,6,10,15,65,85,90,100];

function shortt($array1,$array2){



 $array1_count = count($array1);
   $array2_count = count($array2);

while ($array1_count || $array2_count)
{
  $array1_empty = $array1 == [];
  $array2_empty = $array2 == [];

if (!$array1_empty && !$array2_empty)
{
    if (current($array1) < current($array2))
    {
        $array3[] = array_shift($array1);
        $array1_count--;
    }
    else
    {
        $array3[] = array_shift($array2);
        $array2_count--;
    }
}
elseif (!$array1_empty)
{
    $array3[] = array_shift($array1);
    $array1_count--;
}
elseif (!$array2_empty)
{
    $array3[] = array_shift($array2);
    $array2_count--;


  }


    }

         return $array3;      
 }


$newarr = shortt($arr1,$arr2);

print_r($newarr); 


?>