PHP取消数组中的数据设置


PHP Unsetting data in an array

我有以下行读取csv并将每一行转换为Array

$reader = new CSV'CSVReader('somecsv.csv');

所以如果我输入

while ($row = $reader->getRow()) {
    print "<pre>";
    print_r($row);
    print "</pre>";
}

输出如下数据

Array
(
    [Column1] => some
    [Column2] => data
    [Column3] => hi
    [Column4] => wow
    [Column5] => help
)
Array ...

假设我想删除column1,在while循环中我可以放置

unset($row['column1']);

这将从输出中删除column1。但是,如果我在$reader类中放置一个函数,如下所示

public function unsetColumns($row)
{
    unset($row['column1']);
}

我把while循环改成下面的

while ($row = $reader->getRow()) {
    $reader->unsetColumns($row);  //this does not work
    unset($row['column1']);  //this works
    print "<pre>";
    print_r($row);
    print "</pre>";
}

则函数调用不删除该列,但unset删除了。我没有同时把它们放在那里,只是把它们都放在那里,这样你就可以看到哪些是有效的,哪些是不可行的。

为什么会这样?

谢谢

你可以通过引用传递你的数组

public function unsetColumns(&$row)
{
    unset($row['column1']);
}
while ($row = $reader->getRow()) {
    $reader->unsetColumns($row);  //this does not work
    unset($row['column1']);  //this works
    print "<pre>";
    print_r($row);
    print "</pre>";
}

您只是传递$row,它也在函数调用中被删除。

但是,您没有返回它(也没有将引用传递给$row)。

做两个修改:

$row = $reader->unsetColumns($row);

public function unsetColumns($row)
{
    unset($row['column1']);
    return $row;
}

让列删除活动被使用

你可以通过引用来传递当前的$row来在函数内部操作,也可以在函数作用域之外看到这些变化。

<?php
public function unsetColumns( &$row )
{
    unset( $row['column1'] );
}
while( $row = $reader->getRow() ) {
    $reader->unsetColumns( $row );
    print "<pre>";
    print_r($row);
    print "</pre>";
}

与现有代码的区别在于函数声明中参数名称:&$row前面的附加&号。

见:http://php.net/manual/en/language.references.pass.php