使用CakePHP foreach()的array_unique - 我做错了什么?

时间:2011-12-09 19:47:33

标签: php arrays cakephp unique-key

我正在尝试从我的数组中提取唯一的年龄id值:

Debugger :: dump($ rate_table_row ['Age'])的示例;

...
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”。

关于我在这里做错了什么想法?

1 个答案:

答案 0 :(得分: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