2011-01-19 96 views
1

我嘗試用同一組中的數組替換值,但它的值不正確,您可以在下面的代碼中看到爲什麼?php數組中的問題用同一組ID替換空值

 

function trace($val) 
{ 
    echo "pre"; 
    print_r($val); 
    echo "pre"; 
} 
$rows = array(
         array('a'=>'33333','b'=>'#3333','group'=>1), 
         array('a'=>'','b'=>'','group'=>1), 
         array('a'=>'','b'=>'','group'=>2), 
         array('a'=>'5555','b'=>'#werwe','group'=>2) 
         ); 
trace($rows); 

$oldGroupId = -1; 
     foreach($rows as &$row) 
      foreach($row as $column=>$fieldValue) 
      { 
        if($row['group']!=$oldGroupId) 
         ${$row['group']}[$column]=0; 
        if(!is_null($row[$column] )) 
         ${$row['group']}[$column]=$row[$column]; 
        //@ in this place try to point to my dynamick variable pointer for change if change value frome previuse all value in array cahnge 
        $row[$column] = & ${$row['group']}[$column]; 
      } 

trace($rows); 
?> 
 

輸出值:

 
Array 
(
    [0] => Array 
     (
      [a] => 33333 
      [b] => #3333 
      [group] => 1 
     ) 

    [1] => Array 
     (
      [a] => 
      [b] => 
      [group] => 1 
     ) 

    [2] => Array 
     (
      [a] => 
      [b] => 
      [group] => 2 
     ) 

    [3] => Array 
     (
      [a] => 5555 
      [b] => #werwe 
      [group] => 2 
     ) 

) 
Array 
(
    [0] => Array 
     (
      [a] => 
      [b] => 
      [group] => 1 
     ) 

    [1] => Array 
     (
      [a] => 
      [b] => 
      [group] => 1 
     ) 

    [2] => Array 
     (
      [a] => 5555 
      [b] => #werwe 
      [group] => 2 
     ) 

    [3] => Array 
     (
      [a] => 5555 
      [b] => #werwe 
      [group] => 2 
     ) 

) 

價值預期:

 
Array 
(
    [0] => Array 
     (
      [a] => 33333 
      [b] => #3333 
      [group] => 1 
     ) 

    [1] => Array 
     (
      [a] => 33333 
      [b] => #3333 
      [group] => 1 
     ) 

    [2] => Array 
     (
      [a] => 5555 
      [b] => #werwe 
      [group] => 2 
     ) 

    [3] => Array 
     (
      [a] => 5555 
      [b] => #werwe 
      [group] => 2 
     ) 

) 

更新:

如果不工作,請告訴我這個原因的另一種方式?

+1

能否請您預期的結果添加到原來的職位? – acm 2011-01-19 13:58:17

回答

1

開始

$rows = array(
    array('a'=>'33333','b'=>'#3333','group'=>1), 
    array('a'=>'','b'=>'','group'=>1), 
    array('a'=>'','b'=>'','group'=>2), 
    array('a'=>'5555','b'=>'#werwe','group'=>2) 
); 

創建一個臨時變量來保存每個組的整體信息。

$groups = array(); 

然後將每個非空值添加到數組中。

foreach ($rows as &$row) { 
    if (!isset($groups[$row['group']])) { 
     $groups[$row['group']] = array(); 
    } 
    $groups[$row['group']] += array_filter($row); 
} 

最後,用組的全部信息替換每一行。

foreach ($rows as &$row) { 
    $row = $groups[$row['group']]; 
} 

輸出:See at Codepad