2011-12-09 29 views
-1

我想從我的數組拉獨特的時代ID值:array_unique與CakePHP foreach() - 我做錯了什麼?

樣品

調試::轉儲($ rate_table_row [ '年齡']);

... 
array(
"id" => "15", 
"name" => "55-59" 
) 

array(
"id" => "15", 
"name" => "55-59" 
) 

array(
"id" => "15", 
"name" => "55-59" 
) 
... 

我試圖做這樣處理的:

$uniqueAgeArray = array_unique($rate_table_row['Age']); 
print_r($uniqueAgeArray); 

$ uniqueAgeArray在任何意義上不是唯一的。所有結果打印如下:

Array ([id] => 15 [name] => 55-59) 

Array ([id] => 15 [name] => 55-59) 

Array ([id] => 15 [name] => 55-59) 

我試圖從此數組中消除任何重複的「id」或「名稱」。

關於我在做什麼錯誤的任何想法?

+0

回答你的問題是「array_unique不工作方式」,看到@viktor的回答您可能意味着要問如何篩選雙打? – Nanne

回答

1

PHP documentation for array_unique

注:請注意,array_unique()是不是要對多維 數組。

因此,您需要使用另一種方法,例如循環訪問數組並存儲以前未遇到的值。

// Temporary index of unique id's and names 
$_index = array(
    'id' => array(), 
    'name' => array(), 
); 

// Final array with unique values 
$uniqueAgeArray = array(); 

foreach ($rate_table_row['Age'] as $item) 
{ 
    // Check if id or name is already present 
    if (isset($_index['id'][$item['id']]) || isset($_index['name'][$item['name']])) 
     continue; 

    // Store in result 
    $uniqueAgeArray[] = $item; 

    // Store values in index 
    $_index['id'][$item['id']] = true; 
    $_index['name'][$item['name']] = true; 
} 

Codepad test case and example

+0

我已經嘗試了關於我可以在線找到的每個建議,並且我無法獲得我想要實現的結果。 – OldWest

+0

我測試了代碼並添加了一個指向鍵盤外殼的鏈接。對我而言,它會按照您所描述的方式過濾出重複值(「消除任何重複的ID或名稱」)。如果這不是你想要達到的目標,請更具體一些。 – Viktor

+0

你試過每一個建議,但也在上面?看起來對我有效? – Nanne