PHP取消设置数组

时间:2015-09-16 09:48:00

标签: php arrays

我有以下行读取csv并将每行转换为数组

$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会删除。我没有同时在那里,只是将它们放在那里,这样你就可以看到哪些有用,哪些无效。

为什么会这样?

由于

3 个答案:

答案 0 :(得分:1)

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

但是,你没有归还它(你没有传递对$row的引用)。

做两处改动:

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

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

因此,您的列删除活动已被使用。

答案 1 :(得分:1)

您可以通过引用传递当前$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

答案 2 :(得分:1)

您可以通过参考传递数组,请参阅Passing by Reference

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