2009-08-22 52 views
2

這裏是所有外部JS文件的樣本陣列從paypal.com:PHP函數進行重新排序數組

Array 
(
    [src] => Array 
     (
      [1] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/lib/min/global.js 
      [2] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/tns/mid.js 
      [8] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/opinionlab/oo_engine.js 
      [11] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/iconix.js 
      [12] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/pageBlockingUnsafeBrowsers.js 
      [13] => https://www.paypalobjects.com/js/tns/min/bid.js 
      [15] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/pp_naturalsearch.js 
      [17] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/site_catalyst/pp_jscode_080706.js 
     ) 

    [size] => Array 
     (
      [1] => 0.273 
      [2] => 0.266 
      [8] => 0.279 
      [11] => 0.265 
      [12] => 0.285 
      [13] => 0.248 
      [15] => 0.275 
      [17] => 0.289 
     ) 

) 

是,有內置的功能,PHP,或自定義的可重新排序這個數組這個(而不大的性能無論是命中):

Array 
(
    [src] => Array 
     (
      [1] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/lib/min/global.js 
      [2] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/tns/mid.js 
      [3] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/opinionlab/oo_engine.js 
      [4] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/iconix.js 
      [5] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/pageBlockingUnsafeBrowsers.js 
      [6] => https://www.paypalobjects.com/js/tns/min/bid.js 
      [7] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/pp_naturalsearch.js 
      [8] => https://www.paypalobjects.com/WEBSCR-590-20090814-1/js/site_catalyst/pp_jscode_080706.js 
     ) 

    [size] => Array 
     (
      [1] => 0.273 
      [2] => 0.266 
      [3] => 0.279 
      [4] => 0.265 
      [5] => 0.285 
      [6] => 0.248 
      [7] => 0.275 
      [8] => 0.289 
     ) 

) 

回答

10

這個功能應該工作,這是簡單的,因爲它可以得到的。

function reindex_array($src) { 
    $dest = array(); 

    foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      foreach ($value as $dest_val) { 
       $dest[$key][] = $dest_val; 
      } 
     } 
    } 

    return $dest; 
} 

使用array_values()所建議的在Henrik's answer

function reindex_array($src) { 
    $dest = array(); 

    foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $dest[$key] = array_values($value); 
     } 
    } 

    return $dest; 
} 

這將使雖然數組的索引從0開始。如果你想從1開始的索引,然後使用此:

function reindex_array($src) { 
    $dest = array(); 

    foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $count = 1; 

      foreach ($value as $dest_val) { 
       $dest[$key][$count] = $dest_val; 
       $count++; 
      } 
     } 
    } 

    return $dest; 
} 
0

我最好的拍攝,時刻(快速和未經考驗的嘗試)

$i = 1;  
foreach($src as $key=>$item) { 
    if ($i != $key) { 
     $src[$i] = $src[$key]; 
     $size[$i] = $size[$key]; 
     unset($src[$key]]; 
     unset($size[$key]]; 
    } 
    $i++; 
} 

但是爲什麼你需要使用數組呢?他們與foreach ($array as $key=>$value)循環槽他們在這方面工作正常。

8

編輯:我沒有注意到陣列在第一嵌套,因此以下是不夠的。由於Imran已經納入我的建議,我不會再編輯這個。


檢查array_values()功能,它幾乎正是你需要的。

到所需輸出唯一的區別是,它重新索引從零開始 - 如果你真的需要索引在一個開始,你可以在array_shift()第一虛擬條目,array_unshift()它之後。

+0

Oups,沒有看到數組嵌套 - 需要編輯... – 2009-08-22 20:45:00

2

如果你真的希望每個子數組索引開始1個使用:

foreach($inputarray as &$a) 
    $a = array_combine(range(1,count($a)),$a); 

開始在0指數各子陣指數使用此...

foreach($inputarray as &$a) 
    $a = array_values($a); 

PHP參考:
array_combine
range
array_values

+0

它可能不太清楚,但你也可以用array_merge替換對array_values的調用。它可以採用單個數組並重新排列索引。 :) – jgrowl 2012-08-31 18:44:46

2

您可以簡單地使用array_values函數,它很容易使用,它只是一個方法/函數。

// The array 
$array = array(0 => "value", 3 => "value", 8 => "value"); 

// Reorder the array 
$array = array_values($array); 

希望這會有所幫助!