按 foreach 中的值对多维数组进行排序


Sort Multi-dimensional Array by Value in foreach

嗨,

我有一个这样的函数:

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

我想按"顺序"而不是文件名对生成的链接进行排序,所以我的 html 看起来像这样:

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

我以为array_multisort会做到这一点,但我什至不知道把它放在哪里。有什么想法吗?

谢谢。

您可以使用数组函数 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']排序。

你的代码有点混乱,我希望我理解你的例子是正确的。如果没有,我希望我的例子能帮助你写你自己的!