2011-07-04 58 views
0

我有一個數組與數組在PHP中的數組,我想根據每個元素內的字段排序數組的頂層,我也想排序數組基於該元素的數組的元素在每個元素內。 (見例子)。我想要它,所以最後,$data第一個項目的'primary'價值'第一'然後'第二'。我也希望它在'第一'和'第二'的範圍內,'secondary'字段下的數組首先具有'val''foo'然後'bar'(對'第一'和'第二')使用usort排列數組陣列PHP

$data = array (
    array (
     'myid'  => 4, 
     'primary' => 'second', 
     'secondary' => array (
      array (
       'myid' => 10, 
       'val' => 'bar', 
      ), 
      array (
       'myid' => 8, 
       'val' => 'foo', 
      ), 
     ), 
    ), 
    array (
     'myid'  => 2, 
     'primary' => 'first', 
     'secondary' => array (
      array (
       'myid' => 10, 
       'val' => 'bar', 
      ), 
      array (
       'myid' => 8, 
       'val' => 'foo', 
      ), 
     ), 
    ), 
); 

function mysort($a, $b) { 
    return $a['myid'] > $b['myid']; 
} 

echo "pre sort:\n"; 
print_r($data); 

usort($data, 'mysort'); 

echo "post top level sort:\n"; 
print_r($data); 

foreach ($data as $k=>$item) { 
    usort($item['secondary'], 'mysort'); 
    echo "Second Level Item sort:\n"; 
    print_r($item['secondary']); 
} 

echo "post second level sort:\n"; 
print_r($data); 

爲什麼我會得到以下最終輸出?

post second level sort: 
Array 
(
    [0] => Array 
     (
      [myid] => 2 
      [primary] => first 
      [secondary] => Array 
       (
        [0] => Array 
         (
          [myid] => 10 
          [val] => bar 
         ) 

        [1] => Array 
         (
          [myid] => 8 
          [val] => foo 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [myid] => 4 
      [primary] => second 
      [secondary] => Array 
       (
        [0] => Array 
         (
          [myid] => 10 
          [val] => bar 
         ) 

        [1] => Array 
         (
          [myid] => 8 
          [val] => foo 
         ) 

       ) 

     ) 

) 

順便說一下,我使用PHP 5.2.17。

回答

0

試試這個

foreach ($data as $k=>&$item) { 
    usort($item['secondary'], 'mysort'); 
    echo "Second Level Item sort:\n"; 
    print_r($item['secondary']); 
} 

爲什麼會是這樣?

因爲在默認情況下foreach複製它中的所有變量。
所以,如果你在foreach改變的變量,你只改變局部變量,經過foreach是年底,當您添加&變量會本身和以前一樣foreach

- 比foreach不可複製的變量,並參考使用它

+0

謝謝!我覺得那是發生了什麼,但不知道要用'&'。 – Max