【问题标题】:PHP Getting unique values from multidimensional array inside a multidimensional arrayPHP从多维数组中的多维数组中获取唯一值
【发布时间】:2011-09-23 14:51:06
【问题描述】:

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

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);

有什么建议吗?

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:
    $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] 中的所有值,然后删除重复项。

    【讨论】:

    • array_merge() 不会在这里剪切它,它会用相同的键覆盖后面的值,因为 ['int'] 已编入索引...
    • 谢谢。那行得通……这里的钥匙对我来说没用。我认为我缺少的步骤是 KISS 和 jsut 删除欺骗。
    • ['int'] 包含查看示例的数字键,所以应该没问题
    【解决方案2】:

    您根本没有遍历数组中“TimeChunks”键中的数组,试试这个:

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

    【讨论】:

      【解决方案3】:

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

      如果你愿意,你可以在键和值上使用你的 if 语句

      【讨论】:

        【解决方案4】:

        这样的?

        $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() 传递会更有效(更少的函数调用)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-05
          • 2018-12-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多