2012-12-07 112 views
0

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

我尝试了一个for($i = 1; $i <= 7; $i++)并在我的数组中查看是否'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

到目前为止你有什么代码? –

+1

你真的想做这个作为创建初始数组的代码的一部分。你最初从哪里获得数据? – Luke

+0

数据来自数据库。增加了代码。 – stef

回答

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

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

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),将阵列的最后一个元素移动到正确位置并以相同方式填充空白区域。