2014-01-29 16 views
-2

多維數組我有這樣排序PHP的不同格式的關鍵

Array 
(
    [name] => Array 
     (
      [0] => img/test240.jpg 
      [1] => img/cs1.jpg 
      [2] => img/cs2.jpg 
      [3] => img/cs3.jpg 
     ) 

    [link] => Array 
     (
      [0] => http://google.com 
      [1] => http://google.com 
      [2] => http://facebook.com 
      [3] => http://orkut.com 
     ) 

    [order] => Array 
     (
      [0] => 4 
      [1] => 1 
      [2] => 2 
      [3] => 3 
     ) 

) 

我需要借命令是在多維數組的鍵對它進行排序的數組。這是輸出。

Array 
(
    [name] => Array 
     (
      [1] => img/cs1.jpg 
      [2] => img/cs2.jpg 
      [3] => img/cs3.jpg 
      [0] => img/test240.jpg 
     ) 

    [link] => Array 
     (
      [1] => http://google.com 
      [2] => http://facebook.com 
      [3] => http://orkut.com 
      [0] => http://google.com 
     ) 

    [order] => Array 
     (
      [1] => 1 
      [2] => 2 
      [3] => 3 
      [0] => 4 
     ) 

) 

在這裏,您可以看到訂單排序時的名稱和鏈接也按訂單排序。我怎樣才能做到這一點與PHP。

+1

它真的排序嗎?爲什麼在3之後是0?或者你的意思是你想在最後插入第一個元素?或者你需要它根據「order」數組的值進行排序?無論如何,你的問題目前還不清楚。 –

+0

我不認爲。我的意思是說,當訂單值排序鏈接和名稱值應該按照訂單值排序 –

+0

Raheel,請考慮提高一些其他人在這裏慷慨地給予他們的時間,爲您認爲值得的答案。事實上,你似乎忽視了它們。我爲此下了決心;作爲高級代表用戶,您應該鼓勵其他社區成員。 – halfer

回答

0

好一番研究後,我發現這樣的

asort($data['order']); 
$keys = array_keys($data['order']); 

$data['name'] = array_replace(array_flip($keys), $data['name']); 
$data['link'] = array_replace(array_flip($keys), $data['link']); 
$data['order'] = array_replace(array_flip($keys), $data['order']); 

一個簡單的解決方案。雖然我不想上的所有按鍵採用array_replacearray_flip但這是暫時完成。我一定會試圖找到我可以用單個指令來做到這一點。

0

您必須將array_map()sort()一起使用。
如果你想保留實際的元素順序,你必須使用asort()而不是sort()

試試這個代碼:

$arr = array(
    'name' => array(
     0 => 'img/test240.jpg', 
     1 => 'img/cs1.jpg', 
     2 => 'img/cs2.jpg', 
     3 => 'img/cs3.jpg', 
    ), 
    'link' => array(
     0 => 'http://google.com', 
     1 => 'http://google.com', 
     2 => 'http://facebook.com', 
     3 => 'http://orkut.com', 
    ), 
    'order' => array(
     0 => 4, 
     1 => 1, 
     2 => 2, 
     3 => 3, 
    ), 
); 
function mysort($a) { 
    asort($a); 
    return $a; 
} 
$arr = array_map('mysort', $arr); 
print_r($arr); 

Demo

+0

我不認爲這會工作,因爲它需要根據「訂單」數組進行排序。 –

0

試試這個,它使用array_multisort

$array認爲:

array (size=3) 
    'name' => 
    array (size=4) 
     0 => string 'img/test240.jpg' (length=15) 
     1 => string 'img/cs1.jpg' (length=11) 
     2 => string 'img/cs2.jpg' (length=11) 
     3 => string 'img/cs3.jpg' (length=11) 
    'link' => 
    array (size=4) 
     0 => string 'http://google.com' (length=17) 
     1 => string 'http://google.com' (length=17) 
     2 => string 'http://facebook.com' (length=19) 
     3 => string 'http://orkut.com' (length=16) 
    'order' => 
    array (size=4) 
     0 => string '4' (length=1) 
     1 => string '1' (length=1) 
     2 => string '2' (length=1) 
     3 => string '3' (length=1) 


代碼:

$sort = array(); 
foreach($array as $k) { 
    foreach($k as $ind=>$val){ 
    $sort['name'][$ind] = $array['name'][$ind]; 
    $sort['link'][$ind] = $array['link'][$ind]; 
    $sort['order'][$ind] = $array['order'][$ind]; 
    } 
} 

array_multisort($sort['order'], SORT_ASC, $sort['link'], SORT_ASC, $sort['name'], SORT_ASC); 
var_dump($sort); 


輸出:

array (size=3) 
    'name' => 
    array (size=4) 
     0 => string 'img/cs1.jpg' (length=11) 
     1 => string 'img/cs2.jpg' (length=11) 
     2 => string 'img/cs3.jpg' (length=11) 
     3 => string 'img/test240.jpg' (length=15) 
    'link' => 
    array (size=4) 
     0 => string 'http://google.com' (length=17) 
     1 => string 'http://facebook.com' (length=19) 
     2 => string 'http://orkut.com' (length=16) 
     3 => string 'http://google.com' (length=17) 
    'order' => 
    array (size=4) 
     0 => string '1' (length=1) 
     1 => string '2' (length=1) 
     2 => string '3' (length=1) 
     3 => string '4' (length=1) 
0
$this_arr = array(1,2,3,0); 

function my_sort_2($arr, $arrangement) 
{ 
    $flag = false; 

    foreach($arr as $key => $val) 
    { 
     if(is_array($arr[$key])) 
     { 
      $arr[$key] = my_sort_2($arr[$key],$arrangement); 
      $flag = true; 
     } 
    } 

    if($flag == false && is_array($arr) && is_assoc($arr) === false) 
    { 
     $temp = array(); 
     for($i = 0; $i < count($arrangement); $i++) 
     { 
      if(isset($arr[$arrangement[$i]])) 
      { 
       $temp[$arrangement[$i]] = $arr[$arrangement[$i]]; 
       unset($arr[$arrangement[$i]]); 
      } 
     } 
     //$arr = array_merge($temp,$arr); 
     $arr = $temp; 
    } 

    return $arr; 
} 

包括下面這個函數來經營自己的功能。此外信貸@Matt Whittingham在那裏我得到這個代碼

function is_assoc($array) 
{ 
    $keys = array_keys($array); 
    return array_keys($keys) !== $keys; 
} 

現在讓我們做一些sortin' ...... print_r(my_sort_2($arr,$this_arr));假設$改編含有山的陣列。

輸出是確切你想要什麼。

它會搜索嵌套數組(至少有意),看看它是否在標準的數字有序鍵(簡而言之,不是自定義順序 - 然而;不assoc),然後按您想要的方式進行分類。

注意:我知道我的代碼不太可能是好的,優化的或無錯的,這是我的第二次嘗試,第一次誤解您的需求(請參閱函數名稱?)。