簡體   English   中英

PHP在數組中取消設置數據

[英]PHP Unsetting data in an array

我有以下行讀取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 ...

假設我想刪除我可以放置的while循環中的column1

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會刪除。 我不同時在那里,只是將它們放在那里,這樣你就可以看到什么有效,什么無效。

為什么會這樣?

謝謝

你只是傳遞$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函數聲明中的&$row

請參閱: http//php.net/manual/en/language.references.pass.php

你可以通過引用傳遞你的數組,在這里閱讀更多關於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>";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM