我需要一些幫助來使用它的一個屬性 ($url) 按字母順序對 SimpleXML 陣列進行排序。我有以下生成頁面的代碼:
<?php
$xml = simplexml_load_file($xml_url);
$ids = array();
foreach($xml->list as $id) {
$ids[] = $id;
}
//It works but randomize instead of sorting alphabetically
usort($ids, function ($a, $b) {
return strnatcmp($a['url'], $b['url']);
});
foreach ($ids as $id) {
PopulatePage($id);
}
function PopulatePage($id) {
$url = $id->url;
$img = $id->img;
//OTHER CODES TO GENERATE THE PAGE
}?>
問題已解決!
uj5u.com熱心網友回復:
不需要轉換,你已經有一個可以排序的陣列,你只需要了解usort
回呼是如何作業的。陣列中的每個專案$ids
都是一個 SimpleXMLElement 物件,每次運行回呼時,都會給它兩個物件進行比較。這些物件將與現有 PopulatePage 函式中的物件完全相同,因此訪問 URL 需要完全按照它在那里 ( $url = $id->url;
) 的方式進行,而不是使用不同的符號 ( $id['url']
)。
為了使其更明確,讓我們撰寫一個具有許多清晰變數名的命名函式:
function CompareTwoIds(SimpleXMLElement $left_id, SimpleXMLElement $right_id): int {
$left_url = $left_id->url;
$right_url = $right_id->url;
return strncatcmp($left_url, $right_url);
}
現在您可以測驗手動呼叫該函式,并在您滿意時將其用作回呼:
usort($ids, 'CompareTwoIds');
一旦你對這些原則感到滿意,你可能會決定跳過額外的冗長而直接寫這個,這是完全等價的:
usort($ids, fn($a,$b) => strncatcmp($a->url, $b->url));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/469347.html