取消设置多维数组中的数据

Posted

技术标签:

【中文标题】取消设置多维数组中的数据【英文标题】:Unset data in a multidimensional array 【发布时间】:2015-09-30 12:51:02 【问题描述】:

我有 csv[ ][ ]。如何使用 for each 循环取消设置行中的数据?

for each ($index) 
if (conditions to meet)  
unset(csv[$index]);     


【问题讨论】:

foreach ($csv as $key => $value) if (0 === strpos($csv[$key][0], 'bad')) unset($csv[ $key]); 谢谢你:) 【参考方案1】:

试试这个:

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

【讨论】:

【参考方案2】:

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

为了能够直接修改循环中的数组元素,在 $value 之前使用 &。在这种情况下,该值将由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);

【讨论】:

以上是关于取消设置多维数组中的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何取消设置多维数组中的最后一项?

通过嵌套的 foreaches 取消设置多维数组中的键

如何删除多维数组中的唯一元素?

PHP:使用 foreach 从多维数组中删除元素(按键)

动态获取/设置多维数组中的值的函数

一个管理多维数组的类!如何管理单元格中的不同数据类型?