[英]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.