PHP Получение уникальных значений из многомерного массива в многомерном массиве - PullRequest
0 голосов
/ 23 сентября 2011

Я пытаюсь получить значения из многомерного массива внутри многомерного массива.Вот многомерный массив ...

Array
(
    [0] => Array
        (
            [CalID] => 121111
            [Rink] => North
            [TimeChunks] => Array
                (
                    [int] => Array
                        (
                            [0] => 6
                            [1] => 4
                            [2] => 3
                            [3] => 2
                            [4] => 1
                        )

                )

        )

    [1] => Array
        (
            [CalID] => 121111
            [Rink] => South
            [TimeChunks] => Array
                (
                    [int] => Array
                        (
                            [0] => 4
                            [1] => 2
                        )

                )


        )
)

Я хочу получить только допустимые фрагменты времени из [TimeChunks] [int], то есть: 1,2,3,4,6,8, но я могу 'Кажется, что мы углубляемся до второго многомерного массива.Вот что я пробовал без игры в кости:

    $tmp = array ();

foreach ($a as $row) 
    if (!in_array($row,$tmp)) array_push($tmp,$row);

print_r ($tmp);

Есть предложения?

Ответы [ 4 ]

0 голосов
/ 23 сентября 2011
$tmp = array();

foreach ($a AS $row) {
  if (isset($row['TimeChunks']['int']) && is_array($row['TimeChunks']['int'])) {
    $tmp = array_merge($tmp, $row['TimeChunks']['int']);
  }
}
$tmp = array_unique($tmp);

Если ключи массива не важны для вас, это должно сработать.Он просто объединяет все значения в различных [TimeChunks] [int] и затем удаляет дубликаты.

0 голосов
/ 23 сентября 2011

Что-то вроде этого?

$tmp = array();
foreach ($array as $section) { // Loop outer array
  if (isset($section['TimeChunks']['int'])) { // make sure ['TimeChunks']['int'] is set for this inner array
    foreach ($section['TimeChunks']['int'] as $chunk) { // Loop the time chunks
      $tmp[] = $chunk; // Push the chunks onto the $tmp array
    }
  }
}
$tmp = array_unique($tmp); // Remove duplicate values

print_r($tmp);

Вам нужно перебрать внешний массив, получить содержимое ключа ['TimeChunks']['int'] и вставить его в массив $tmp.Вы можете выполнить проверку in_array() на каждой итерации, но было бы более эффективно (с меньшим количеством вызовов функций) добавить их все в массив $tmp и затем передать его через array_unique().

0 голосов
/ 23 сентября 2011

почему бы не использовать foreach ($ a как $ key => $ value)

, тогда вы можете использовать оператор if для ключей и значений, если хотите

0 голосов
/ 23 сентября 2011

Вы вообще не просматриваете массив в ключе TimeChunks в вашем массиве, попробуйте это:

foreach ($a as $row) {
  foreach ($row['TimeChunks'] as $chunk) {
    if (!in_array($row,$chunk)) array_push($tmp,$$chunk);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...