PHP从多维数组中的多维数组中获取唯一值

时间:2011-09-23 14:51:06

标签: php arrays multidimensional-array

我正在尝试从多维数组中的多维数组中获取值。这是多维数组...

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

你根本没有在数组的'TimeChunks'键中循环遍历数组,试试这个:

foreach ($a as $row) {
  foreach ($row['TimeChunks'] as $chunk) {
    if (!in_array($row,$chunk)) array_push($tmp,$$chunk);
  }
}

答案 1 :(得分:0)

这样的东西?

$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()后,效率会更高(函数调用次数更少)。

答案 2 :(得分:0)

为什么不使用foreach($ a as $ key => $ value)

然后,如果需要,可以在键和值上使用if语句

答案 3 :(得分:0)

$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]中的所有值,然后删除了重复项。