2016-04-28 86 views
0

嗨,排序多維數組由值

我有這樣的功能:

function column_links() { 
$column = scandir("content"); 
foreach ($column as $value) { 
    $stvalue = str_replace(".php", "", $value); 
    echo "<a href=\"{$stvalue}\">{$GLOBALS['tags'][$stvalue][title]}</a>"; 
} 
} 

,這是我的變量:

define('title', 0); 
define('desc', 1); 
define('order', 2); 

$tags = array(
    'index' => array('My Page', 'this is a description', '1'), 
    'about' => array('About', 'this is a description', '2'), 
    'sitemap' => array('Site Map', 'this is a description', '3')); 

我要排序的通過「order」而不是文件名生成鏈接,所以我的html看起來像這樣:

<a href="index">My Page</a> 
<a href="about">About</a> 
<a href="sitemap">Site Map</a> 

我認爲array_multisort會做的伎倆,但我甚至不知道把它放在哪裏。請有任何想法嗎?

謝謝。

回答

0

您可以使用數組函數usort來定義您自己的排序!

它的工作方式是編寫自己的函數來確定數組應該如何排序。該函數應返回小於,等於或大於零的整數,以確定第一個參數與第二個參數的比較方式。

例如:

我寫稱爲order_sort一個自定義功能,這比較['order']密鑰。

function order_sort($a, $b) { 
    if ($a['order'] > $b['order']) 
     return 1; 
    if ($a['order'] < $b['order']) 
     return -1; 
    return 0; 
} 

然後我可以在我的數組上調用usort來使用我的自定義函數對它進行排序。

usort($tags, 'order_sort'); 

其鍵將被丟棄,數組將按['order']排序。

你的代碼有點混亂,我希望我能理解你的例子。如果沒有,我希望我的榜樣幫助你寫出你自己的!

+0

我的代碼是什麼讓你困惑? –

+0

我只是昏昏欲睡,大部分時間都很難弄清楚你的數組的實際外觀。再看一遍,你可能想在我的例子中用['order']代替[2]。但邏輯在那裏。 –

+0

其他人請嗎? –