2016-03-11 137 views
2

我有数组是这样的:如何按照PHP中的另一个数组对数组进行排序?

Array(
     [06:30 PM] => 2 
     [03:00 AM] => 3 
     [08:00 PM] => 4 
    ) 

所以我用uksort排序的关键和数组等进行排序:

Array(
     [03:00 AM] => 3 
     [06:30 PM] => 2 
     [08:00 PM] => 4 
) 

和代码我用的是:

uksort($arr, function($a, $b) { 
      return (strtotime(date('H:i',strtotime($a))) > strtotime(date('H:i',strtotime($b)))); 
     }); 

这个数组有时间的键和值的计数value.Now,我有另一个数组,其中包含上述键的值。

Array 
     (
      [1] => Array 
       (
        [0] => Default 
        [1] => BHU 
       ) 

      [2] => Array 
       (
        [0] => Default 
        [1] => HOT 
        [2] => COLD 
       ) 

      [3] => Array 
       (
        [0] => Default 
        [1] => Test 
        [2] => Test1 
        [3] => Test2 
       ) 
     ) 

现在,我要按照上述排序的数组这个数组也进行排序。我怎样才能做到这一点?

感谢

+0

这不是一个好方法,我认为你想先在键值中设置值,而不是计数值,而不是对它进行排序。否则,您将如何按照每个时间对值进行精确排序(您认为这是关键) – jilesh

回答

1

首先,你写的代码可以简化为

uksort($arr, function($a, $b) { 
    return (strtotime($a) > strtotime($b)); 
}); 

要知道答案,这将是混乱的,使代码为您的阵列结构。

我会建议制作下面的结构,然后用你写的代码进行排序,然后用我所展示的小改进。下面

检查,

Array 
     (
      [06:30 PM] => Array 
       (
        [0] => Default 
        [1] => BHU 
       ) 

      [03:00 AM] => Array 
       (
        [0] => Default 
        [1] => HOT 
        [2] => COLD 
       ) 

      [08:00 PM] => Array 
       (
        [0] => Default 
        [1] => Test 
        [2] => Test1 
        [3] => Test2 
       ) 
     ) 
在这个例子中
1
<?php 

$arr = array(
     '06:30 PM' => 2, 
     '03:00 AM' => 3, 
     '08:00 PM' => 4, 
    ); 

$arr2 = array(
      '1' => array(
        '0' => 'Default', 
        '1' => 'BHU' 
       ), 

      '2' => array(
        '0' => 'Default', 
        '1' => 'HOT', 
        '2' => 'COLD', 
       ), 

      '3' => array(
        '0' => 'Default', 
        '1' => 'Test', 
        '2' => 'Test1', 
        '3' => 'Test2', 
       ), 
     ); 

$arr3 = array_combine(array_keys($arr), $arr2); 

uksort($arr3, function($a, $b) { 
      return (strtotime(date('H:i',strtotime($a))) > strtotime(date('H:i',strtotime($b)))); 
     }); 

echo"<pre>"; 
print_r($arr3); 
?> 

这里你的第一个数组中第一次使用array_keys它将把你的密钥为值,比你的另一阵列结合它它,你将使用array_combine在array_combine它会得到第一阵列值为键和第二阵列值值,比排序的数组作为每个键 有关详情,请将把此链接:

http://php.net/manual/en/function.array-combine.php

http://php.net/manual/en/function.array-keys.php

相关问题