[英]Sorting a 2 dimensional array in PHP
想知道是否有人可以提供幫助。
我有一個二維數組,其中包含多個工作項;例如:
$portfolioItems [$i] = array('job' => $extra_job->field_value,
'mediaType' => $media_type->field_value, 'default' => $default->field_value
);
我簡化了數組以顯示我要排序的元素。
基本上,此列表最終會在縮略圖/數據等中填充我正在使用的jfredcarousel。
一切正常,但是我想做的是按照以下特定順序進行:
如果媒體類型中包含文本“ hero”(將只是一個實例),則將此權利推到最前面。
然后,下一個項目需要是已被識別為“默認”項目集的一些工作項目。 因此我可能會在某處設置一個標志,以將作業號標識為“默認”,並像“英雄”過程一樣進行檢查。
因此它將是“英雄”項目,然后將作業編號項目定義為“默認”,其余的將在此之后按順序下降(我已經按作業編號對這些項目進行了排序)。
對現有的二維數組進行排序的最佳方法是什么? 我看過移位/未移位等問題,但無法實現我想要的功能-我現在只考慮復制數組,然后逐個檢查這些條件,以便新數組看起來正確。 然后銷毀舊數組。
任何想法表示贊賞
謝謝
使用uasort
並編寫自己的比較函數,以體現您想要的那些規則。
就像是:
function cmp($a, $b) {
if (strpos($a['mediaType'], 'hero') !== false && strpos($b['mediaType'], 'hero') === false) {
return 1;
} else if (strpos($a['mediaType'], 'hero') === false && strpos($b['mediaType'], 'hero') !== false) {
return -1;
} else if ($a['default'] == 1 && $b['default'] != 1) {
return 1;
} else if ($a['default'] != 1 && $b['default'] == 1) {
return -1;
} else {
return 1;
}
}
uasort($portfolioItems, 'cmp');
這樣的事吧? :)
$finalItems = array();
for($i = 0; i < count($portfolioItems); $i++){
if($portfolioItems[$i]['media_type'] == 'hero'){
reindex($finalItems, 0);
$finalItems[0] = $portfolioItems[$i];
}
else if($portfolioItems[$i]['default'] == true){
reindex($finalItems, 1);
$finalItems[1] = $portfolioItems[$i];
}
else {
if($i != 0 && $i != 1){
reindex($finalItems, $i);
$finalItems[$i] = $portfolioItems[$i];
}
}
}
function reindex(&$arr, $modifiedPosition){
for($i = 0; $i < count($arr); $i++){
if($modifiedPosition <= $i){
$arr[$i+1] = $arr[$i];
if($i == $modifiedPosition){
unset($arr[$i]);
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.