PHP:动态排序多维数组

时间:2014-08-16 19:39:56

标签: php arrays multidimensional-array

我有一个基于不同位置的网站共有的功能。二维数组看起来像这样:

$sites = array(
    'UK' => array(
        "sitecode" => "AUTest",
        "domain" => ".com.au",
        "label" => "Australia",
        ), 
    'DE' => array(
        "sitecode" => "DETest",
        "domain" => ".de",
        "label" => "Germany"
        ), 
    'CA' => array(
        "sitecode" => "CATest",
        "domain" => ".ca",
        "label" => "Canada"
        )
);

我想在每个网站上显示所有国家/地区的列表,但始终在列表顶部显示当前国家/地区,其他国家/地区按自然顺序列出,例如

在澳大利亚,我希望看到:

<li class="foo"><a href="http://example.com.au">Australia</a></li>
<li><a href="http://example.de">Germany</a></li>
<li><a href="http://example.ca">Canada</a></li>

在德国:

<li class="foo"><a href="http://example.de">Germany</a></li>
<li><a href="http://example.com.au">Australia</a></li>
<li><a href="http://example.ca">Canada</a></li>

在加拿大:

<li class="foo"><a href="http://example.ca">Canada</a></li>
<li><a href="http://example.com.au">Australia</a></li>
<li><a href="http://example.de">Germany</a></li>

如果我有这样的话:

foreach ($sites as $key => $list) {  
    if (My_External_Variable ==  $list['sitecode']) { 
        echo '<li><a class="foo" href="http://www.example' . $list['domain'] .'/">' . $list['label'] . '</a>';
    } 
    else { 
        echo '<li><a href="http://www.example' . $list['domain'] . '">' . $list['label']  . '</a></li>'; 
    } 
}

我可以找到我正在查看的当前国家/地区网站,例如,应用css类,但实际上,它始终会以其索引顺序显示。

我看了很多人的页面,但不得不承认我不是一个聪明的人。我我需要做的是根据我当前正在查看的国家/地区网站动态更改索引,以便我可以先放置它,然后迭代剩下的。我确信它可以做到,但我一直试图做到这一点。

我希望有人能指出我正确的方向。

2 个答案:

答案 0 :(得分:0)

你可以将输出保存到变量,将选择保存到变量,然后将它们链接在一起,这样第一个就是选中的

$list = ''; $selected = '';
   foreach ($sites as $key => $list) {

        if (My_External_Variable ==  $list['sitecode']) { 
            $selected = '<li><a class="foo" href="http://www.example' . $list['domain'] .'/">' . $list['label'] . '</a>';
        } 
        else { 
            $list .= '<li><a href="http://www.example' . $list['domain'] . '">' . $list['label']  . '</a></li>'; 
        } 
    }
echo $selected . $list;

答案 1 :(得分:0)

为什么不使用其他数组来描述订单?

<?php
$sites = array(
    'UK' => array(
        "sitecode" => "AUTest",
        "domain" => ".com.au",
        "label" => "Australia",
        ), 
    'DE' => array(
        "sitecode" => "DETest",
        "domain" => ".de",
        "label" => "Germany"
        ), 
    'CA' => array(
        "sitecode" => "CATest",
        "domain" => ".ca",
        "label" => "Canada"
        )
);

$sites_order = array(
    "UK" => array("UK", "DE", "CA"),
    "DE" => array("DE", "UK", "CA"),
    "CA" => array("CA", "UK", "DE")
);

$selected_language = "DE";

foreach($sites_order[$selected_language] as $language) {
    printf("<pre>%s</pre>",$sites[$language]["label"]);
}

?>