簡體   English   中英

PHP:動態排序多維數組

[英]PHP: Dynamically sort a multi-dimensional 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類,但實際上,它將始終按索引順序顯示。

我看了很多手冊頁,但不得不承認我不是一個聰明的人。 認為我需要做的是根據當前正在查看的國家/地區站點動態更改索引,以便可以先放置索引,然后遍歷其余索引。 我敢肯定它是可以做到的,但是我一直試圖做到這一點。

我希望有人可以指出正確的方向。

您可以將輸出保存到變量,將所選內容保存到變量,然后將它們循環鏈接在一起,這樣第一個將被選中

$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;

為什么不使用另一個數組來描述順序?

<?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"]);
}

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM