我有一個(gè) CSV 文件,使一些 MySQL 變量易于閱讀,其中行中的第一項(xiàng)是 MySQL 字段名稱,第二項(xiàng)是要在字段中填寫的用戶友好名稱,如下所示:Hymn1,First Hymn,Hymn2,Second Hymn,date,Date,C2W,Call To Worship,然后,我將創(chuàng)建單獨(dú)的列表,以便教堂中的人們可以輸入與他們相關(guān)的數(shù)據(jù) - 音樂總監(jiān)將輸入國歌和奉獻(xiàn)的姓名、作者和歌詞等。我將使用 MySQL 變量名稱填充該列表,并從中生成頁面。我想將該 CSV 轉(zhuǎn)換為數(shù)組,以便生成一個(gè)頁面,該頁面將以用戶可讀的方式回顯字段標(biāo)簽的字段名稱。我認(rèn)為我的部分問題是 CSV 文件是橫向的。大多數(shù)答案都假設(shè)第一行是字段名稱,其余是內(nèi)容,但這里的情況并非如此。如果這是 Python,我只會(huì)將它們壓縮到字典中,但在 PHP 中顯然你使用關(guān)聯(lián)數(shù)組。我打開 CSV 并將結(jié)果放入一個(gè)名為 的字符串中$keys,并回顯該字符串以驗(yàn)證它是否如上所示,確實(shí)如此。然后我聲明了數(shù)組,去掉了換行符并將其替換為第二個(gè)逗號(hào),然后用管道替換了第二個(gè)逗號(hào):$assoc = array();$keys = str_replace("\r", ",", $keys);$keys = str_replace(",,", "|", $keys);之后,我將 $keys 字符串分解為一個(gè)新變量,并以管道作為分隔符。到目前為止,一切都很好。$newvar = explode("|", $keys);最后,我分解了數(shù)組中每個(gè)鍵中的每個(gè)逗號(hào)分隔項(xiàng),并在 foreach 循環(huán)中將它們相互關(guān)聯(lián)。foreach($newvar as $iterator) {? ? $mini = explode(",", $iterator);? ? $mini[0] = ltrim($mini[0], "\n");? ? $assoc[$mini[0]] = $mini[1]; }print_r當(dāng)我在我的陣列上做一個(gè)時(shí)$assoc,它給了我我所希望的一切。從源碼來看:Array(? ?[Hymn1] => First Hymn? ?[Hymn2] => Second Hymn? ?[date] => Date? ?[C2W] => Call to Worship)但是 - 這就是問題部分 - 當(dāng)我嘗試使用 or 訪問數(shù)組中的各個(gè)元素時(shí),echo $assoc['Hymn1'];我echo $assoc->Hymn1;什么也沒得到。我可以回顯“Hello World”,它會(huì)出現(xiàn),但沒有任何結(jié)果。我也嘗試過 str_getcsv,但它只創(chuàng)建每個(gè)逗號(hào)分隔項(xiàng)目的數(shù)組,或者與此數(shù)組類似的數(shù)組,當(dāng)我嘗試回顯每個(gè)項(xiàng)目時(shí),最終不會(huì)打印任何內(nèi)容。
1 回答

慕村225694
TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以通過兩種方式訪問數(shù)據(jù):使用字段名稱或用戶友好版本。
此代碼讀取文件并在讀取文件時(shí)創(chuàng)建兩個(gè)數(shù)組。 $variables是使用Hymn1值作為鍵,$names使用First Hymn值作為鍵。
$variables = [];
$names= [];
$fh = fopen($fileName, "r");
while ( $row = fgetcsv($fh)) {
$variables [$row[0]] = $row[1];
$names [$row[1]] = $row[0];
}
fclose($fh);
print_r($variables);
print_r($names);
- 1 回答
- 0 關(guān)注
- 132 瀏覽
添加回答
舉報(bào)
0/150
提交
取消