2012-04-26 40 views
1

這應該採取任何行ing_name是重複的,結合eff_name字段並刪除重複,但它也有副作用,將數組從數字更改爲關聯。我的ajax期待數組數組。功能正在改變數組從數字到關聯

for($i=count($recipe)-1; $i>0; $i--) { 
    if($recipe[$i]['ing_name'] == $recipe[$i-1]['ing_name']) { //check for duplicate. **array must be sorted by ing_name** 
     $recipe[$i-1]['eff_name'] .= ', '.$recipe[$i]['eff_name']; //Combine eff_name of duplicates 
     $recipe[$i-1]['link'] = true; 
     unset($recipe[$i]); //remove duplicate index 
    } 
} 

例子:NUMASSOC

Source

編輯:所以我估計它必須是與取消設置指數,所以我這樣做,它似乎就ok工作:

$newRecipe = array(); 
foreach($recipe as $r) { 
    $newRecipe[] = $r; 
} 

新問題,有沒有更好的方法?

回答

1

unset使用命名密鑰。你可以使用array_splice來代替,或者在array_values(但那會很醜!)循環之後得到一個全新的數組。

+0

array_values似乎工作,爲什麼它很醜? – pdizz 2012-04-26 19:04:22

+0

Nevermind,array_splice把我引向了我最終使用的array_slice,因爲我只需要一次刪除一個索引。謝謝! – pdizz 2012-04-26 19:10:42

+1

由於您正在創建一個新的陣列,因此破壞了原始陣列。如果在循環內使用'array_splice'而不是'unset',則不需要像原始代碼那樣創建新數組。 – bfavaretto 2012-04-26 19:12:05