2015-07-12 114 views
1

我有csv [] []。我如何使用每个循环来取消行中的数据?取消多维数组中的数据

for each ($index) { 
if (conditions to meet) { 
unset(csv[$index]);  
} 
} 
+0

的foreach($ CSV为$密钥=> $值){ 如果(0 === strpos($ CSV [$键] [0], '坏的')){ 未设置($ CSV [ $关键]); } }谢谢:) – Dio

回答

1

试试这个:

foreach ($csv as $key => $value) { 
     unset($csv[$key]); 
    } 
0

http://docs.php.net/manual/en/control-structures.foreach.php说:

为了能够直接修改环路普瑞森$值中数组元素与&。在这种情况下,价值将由 reference分配。

这就是你在使用两个foreach循环时应该用来修改行的单个元素。

<?php 
$csv = [ 
    [1,2,3,4,5], 
    [2,3,4,5,6], 
    [3,4,5,6,7], 
    [4,5,6,7,8], 
]; 

// make $row a reference 
// so that unset($row[...]) affects $csv and not only a "copy". 
foreach($csv as &$row) { 
    foreach($row as $key=>$column) { 
     if (0===$column%2) { // e.g. remove all even elements 
      unset($row[$key]); 
     } 
    } 
} 

var_export($csv); 

打印

array (
    0 => 
    array (
    0 => 1, 
    2 => 3, 
    4 => 5, 
), 
    1 => 
    array (
    1 => 3, 
    3 => 5, 
), 
    2 => 
    array (
    0 => 3, 
    2 => 5, 
    4 => 7, 
), 
    3 => 
    array (
    1 => 5, 
    3 => 7, 
), 
) 

或(相同的输出),而foreach循环。

<?php 
$csv = [ 
    [1,2,3,4,5], 
    [2,3,4,5,6], 
    [3,4,5,6,7], 
    [4,5,6,7,8], 
]; 

$csv = array_map(
    function($row) { 
     return array_filter(
      $row, 
      function($col) { 
       return 0!==$col%2; 
      } 
     ); 
    }, 
    $csv 
); 

var_export($csv);