2011-12-09 19 views
-1

私は私の配列からユニークな年齢のid値を引くしようとしています:CakePHPでarray_unique 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」または「name」を削除しようとしています。

私がここで間違っていることに関するアイデアはありますか? PHP documentation for array_uniqueから

+0

あなたの質問への答えは「array_uniqueがそのように動作しない」で、あなたはダブルスをフィルタリングする方法を依頼することを意味するかもしれません@viktorの答えを参照してください? – Nanne

答えて

1

注:その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

関連する問題