array_unique с CakePHP foreach () - что я делаю не так? - PullRequest
0 голосов
/ 09 декабря 2011

Я пытаюсь извлечь уникальные значения идентификатора возраста из моего массива:

Пример Отладчик :: 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 Ответ

1 голос
/ 10 декабря 2011

Из документации PHP для 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 и пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...