在foreach中按值排序多维数组

时间:2016-04-28 02:54:30

标签: php arrays sorting

您好,

我有这样的功能:

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'));  

我想通过&#34; order&#34;对生成的链接进行排序。而不是文件名,所以我的HTML看起来像这样:

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

我认为array_multisort可以解决这个问题,但我甚至无法弄清楚把它放在哪里。有什么想法吗?

谢谢。

1 个答案:

答案 0 :(得分: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']排序。

您的代码有点令人困惑,我希望我理解您的示例。如果没有,我希望我的例子帮助你写自己的!