PHP数组并创建2个子数组(如果它们不存在)

时间:2017-03-25 18:42:50

标签: php arrays

我正在使用PHP。我有一个多维数组。

这个想法应该存在子阵列[65] [1]和[155] [1]。同时,应该存在子阵列[65] [2]和[155] [2]。

换句话说,[nn] [1]和[nn] [2]必须存在。

我希望能够自动添加不存在的子数组。我不知道如何使用PHP。

所以,我正在寻找一个遍历数组并创建不存在的子数组的代码。

这是一个例子。

Array (
  [65] => Array (
    [1] => Array (
      [2] => Array (
        [points] => 0000000600
        [competition] => 0000000011
      )
    )
  )

  [155] => Array (
    [1] => Array (
      [2] => Array (
        [points] => 0000000900
        [competition] => 0000000011
      )
    )

    [2] => Array (
      [1] => Array (
        [points] => 0000000750
        [competition] => 0000000025
      )
    )
  )
}

但是,子阵列[65] [2]不存在。

如上所述,我正在寻找一个遍历数组并创建不存在的子数组的代码。

结果应如下所示:

Array (
  [65] => Array (
    [1] => Array (
      [2] => Array (
        [points] => 0000000600
        [competition] => 0000000011
      )
    )

/* this should be added automatically */

    [2] => Array (
      [1] => Array (
        [points] => 0000000000
        [competition] => 0000000000
      )
    )
  )

/* */

  [155] => Array (
    [1] => Array (
      [2] => Array (
        [points] => 0000000900
        [competition] => 0000000011
      )
    )

    [2] => Array (
      [1] => Array (
        [points] => 0000000750
        [competition] => 0000000025
      )
    )
  )
}

2 个答案:

答案 0 :(得分:0)

如果我理解正确,主阵列中的所有元素本身就是数组,并且每个元素都必须同时具有[1]和[2]元素。您可以使用array_key_exists()功能检查此项。类似的东西:

foreach($rg as $rgkey) {
   if(!array_key_exists(1,$rg[$rgkey])) {
      /* code to initialize $rg[$rgkey][1] */ }
   if(!array_key_exists(2,$rg[$rgkey])) {
      /* code to initialize $rg[$rgkey][2] */ }
   }

答案 1 :(得分:0)

遍历结构的前两个级别,然后检查所需的第三级键(如果不存在),请使用翻转键将默认数据填充到新的子数组中。

代码:(Demo

foreach ($rg as $id1 => $level2) {
    foreach ($level2 as $id2 => $level3) {
        $id3 = key($level3);
        if (!isset($level2[$id3])) {
            $rg[$id1][$id3][$id2] = [
                'points' => '0000000000',
                'competition' => '0000000000'
            ];
        }
    }
}
var_export($rg);

输出:

array (
  65 => 
  array (
    1 => 
    array (
      2 => 
      array (
        'points' => '0000000600',
        'competition' => '0000000011',
      ),
    ),
    2 => 
    array (
      1 => 
      array (
        'points' => '0000000000',
        'competition' => '0000000000',
      ),
    ),
  ),
  155 => 
  array (
    1 => 
    array (
      2 => 
      array (
        'points' => '0000000900',
        'competition' => '0000000011',
      ),
    ),
    2 => 
    array (
      1 => 
      array (
        'points' => '0000000750',
        'competition' => '0000000025',
      ),
    ),
  ),
)