簡體   English   中英

在PHP中對二維數組進行排序

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

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