[英]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.