PHP填充缺少值的数组

时间:2012-12-07 17:00:12

标签: php

下面的数组应该有一个子数组,每个“点”值从1到7,但缺少2,4和6。如何为每个缺失值插入一个数组,其值为“NULL”?

我尝试了一个for($i = 1; $i <= 7; $i++)并在我的数组内部foreach'ing以查看是否'point' == $i但是这不起作用。

这已经在一个相当大的数组的嵌套foreach中,所以性能有点重要。

到目前为止

代码(不完整且显然不起作用)

foreach($measurements as $measurement_id => $set)
        {
            for($i = 1; $i <= 7; $i++)
            {
                foreach($set as $key => $value)
                {
                    $fill = array('value' => null);

                    if($value['point'] == $i)
                        $output[$measurement_id][$key] = $value;
                    else
                        $output[$measurement_id][$key] = $fill;
                }
            }
        }

数组:

            [0] => Array
                (
                    [point] => 1
                    [value] => 1.0
                )

            [1] => Array
                (
                    [point] => 3
                    [value] => 2.0
                )

            [2] => Array
                (
                    [point] => 5
                    [value] => 3.0
                )

            [3] => Array
                (
                    [point] => 7
                    [value] => 4.0
                )

结果应为

             [0] => Array
                (
                    [point] => 1
                    [value] => 1.0
                )

            [1] => Array
                (
                    [point] => 2
                    [value] => NULL
                )

            [2] => Array
                (
                    [point] => 3
                    [value] => 2.0
                )

            [3] => Array
                (
                    [point] => 4
                    [value] => NULL
                )
            [4] => Array
                (
                    [point] => 5
                    [value] => 3.0
                )

            [5] => Array
                (
                    [point] => 6
                    [value] => NULL
                )

            [6] => Array
                (
                    [point] => 7
                    [value] => 4.0

2 个答案:

答案 0 :(得分:0)

试试这个:

$oldArr = [ ..your incomplete array.. ];
$newArr = array();

for ($i = 1; $i < 8; ++$i) {
  $new = array(
    'point' => $i,
    'value' => NULL,
  );

  foreach($oldArr as $old) {
    if ($old['point'] == $i) {
      $new['value'] = $old['value'];
    }
  }

  $newArr[] = $new;
}

现在$newArr应该包含您想要的所有值。

答案 1 :(得分:0)

如果您的原始数组按照示例中的point排序,则只能在一个循环中执行:

$result = array();
for ($i = 1; $i <= 7; $i++)
{
  // get the first element of your set
  $current = reset($set);
  if ($current['point'] === $i)
  {
    // remove the first element of your set and assign it to the result array
    $result[$i - 1] = array_shift($set);
  }
  else
  {
    // create a new, empty entry
    $result[$i - 1] = array('point' => 1, 'value' => NULL);
  }
}

请注意,我正在创建一个新数组并从原始数组中删除值。如果你真的担心资源/性能,你可以使用相同的原理并向后循环(从7到1),将数组的最后一个元素移动到正确的位置并以相同的方式填充空格。

相关问题