我有以下代码,一旦我输入了CSV文件。数组中的一个键有双引号。我不知道该怎么做所以我把它们剥离了,以为这会让我简单地把$ array [0] ['Name']用来访问字符串。但不是!没有。它只是一片空白。
//获取文件并将其打开为变量
$file = fopen('my.csv', 'r') or die('Unable to open file!');
//设置数组以返回
中的数据$returnVal = array();
//设置标题变量
$header = null;
// loop through data
while(($row = fgetcsv($file)) !== false){
// make the header array (key)
if($header === null){
echo "<pre>";
//print_r($row);
$row[0] = trim(str_replace('"', '', $row[0])); // rmove double quotes from array key
//echo "<br>".$row[0];
print_r($row);
$header = $row;
continue;
} // end of set header
//get just names and echo them
//echo "<br>".$row[0];
// more row by row column by column and set data to correct header
$newRow = array();
// loop rows and set data
for($i = 0; $i<count($row); $i++){
$newRow[$header[$i]] = $row[$i];
//echo "<br>" . $newRow[$header[$i]];
//$newRow['First_Name'] = $row[$i];
//unset($returnVal['"Name"']);
}// end for loop
$returnVal[] = $newRow;
}// end while loop
//关闭csv文件
fclose($file);
// $ returnVal现在包含CSV文件的内容
echo "Name: ".$returnVal[0]['Name'] . "<br>";
echo "Email: ".$returnVal[0]['Email Address'];
echo "<pre>";
print_r($returnVal);
// echo $returnVal[0]["Name"];
//var_dump($returnVal);
*****************编辑**************************
var_dump的示例输出(print_r具有相同的输出)
array(13500) {
[0]=>
array(5) {
["Name"]=>
string(10) "my name"
["Email Address"]=>
string(19) "myemail@email.com"
["Date Added"]=>
string(19) "2017-03-27 03:38 PM"
["Signup Date"]=>
string(10) "2016-04-04"
["Username"]=>
string(27) "myusername1459752576"
}
echo "Name: ".$returnVal[0]['Name'] . "<br>"; // prints nothing
echo "Email: ".$returnVal[0]['Email Address']; // prints email just fine
答案 0 :(得分:0)
所以,好像是
reset($returnVal[0]);
是我的问题的答案,重置函数给了我我的数组值。但我仍然想知道为什么对该元素的正常访问不起作用。
答案 1 :(得分:0)
你在评论rmove double quotes from array key
中说,但你实际上并没有这样做。该代码不起作用。您可以在var_dump
的示例输出中看到未引用键,但在您的示例输出中它们是。
fgetcsv
应删除附带的引号,这意味着您的csv文件是双引号(可能是正确的)或其他正在进行的操作。您可以使用$returnVal[0]['"Name"']
要实际删除密钥,您应该foreach
标题行,并手动设置str_replace
或trim
每个密钥,并将其设置为$ header变量。像这样:
$header = array();
foreach($row as $key => $value) {
$key = trim($key, "\" \t\n\r\0\x0B"); // trim quotes as well as standard trim characters
$header[$key] = $value;
}