![](/img/trans.png)
[英]How to populate items from the database into a two-dimensional array in PHP
[英]PHP two-dimensional array with empty items
在另一個用戶的幫助下,我得出了我想要的二維數組的觀點。 我獲得的每個ID($ talente)都會從CSV保存一行。 就像陣列的魅力一樣。 但是輸出使我感到困惑。
這是我使用的CSV:
Schild,1,Licht,1w10,-
Schutz,1,Licht,1w10,-
Licht,4,Licht,1w10,-
Genesung,1,Licht,-,-
Aufopfern,1,Licht,-,-
劇本:
<?php
$talente = $_GET['talente'];
$myFile = fopen("talente.csv", "r");
$csv = [];
while ($data = fgetcsv($myFile, 1000, ",")) {
$csv[] = $data;
}
fclose($myFile);
$talentline = array_filter($csv, function($i) use ($talente) {
return in_array($i, $talente);
}, ARRAY_FILTER_USE_KEY);
print_r(array_values($talentline));
echo $talentline[1][0];
echo $talentline[2][0]; //line 21.
echo $talentline[3][0];
?>
print_r(array_values($ talentline)); 給我ID的1和3的以下輸出。
[0] => Array (
[0] => Schutz
[1] => 1
[2] => Licht
[3] => 1w10
[4] => -
)
[1] => Array (
[0] => Genesung
[1] => 1
[2] => Licht
[3] => -
[4] => -
)
最后的三個回聲給了我這個:
Schutz注意:未定義的偏移量:第21行Genesung的C:\\ xampp \\ htdocs \\ DvC Generator \\ php \\ test.php中的2
我無法解決兩個問題。 第一個是,打印的行是我期望的行之后的一行。 因此,我期望的是“ Schild”而不是“ Schutz”。
我遇到的最大問題是,腳本將行保存在與ID相等的array-position處。 那不是我所需要的,因為它還保存了空數組元素。 當發送ID 1和3時,我期望的結果是在數組[0]處的Schild和在數組[1]處的Licht。
我希望我能解釋得足夠好。
0
開始計數 所以零是第一,而1是第二 。
引起“未定義的偏移”的原因是,您僅“保留”在$_GET['talente']
輸入數組中找到的數組值。 如果將此值更改為2
,則將獲得1和3等的未定義偏移通知。
您的第一個問題是數組以[0]
開頭,因此如果新talentline
數組中有兩個值,則第一個為鍵[0]
,第二個值為鍵[1]
。 等等
與第二個問題相關,因為您正在比較匿名函數中的鍵值,所以您正在通過詢問$_GET
數組給出的值1
尋找第一個值(數組鍵[0]
)。 這就是為什么它給您帶來意想不到的(但正確的)結果的原因。
對於第二個問題(這是一個編碼錯誤):
您需要通過將鍵值增加+1或將輸入參考值減少-1來調整鍵值,以使輸入與給定的CSV值對齊:
return in_array($i, $talente--); //reduces the input comparison value by 1,
//so that the first value ("1") is treated as key "0".
其次,要修復您從腳本稍后引用未設置的數組引用中獲得的通知,請執行以下操作:
print isset($talentline[2][0]) ? $talentline[2][0]; : "";
// shorthand PHP stating that if value is set then print it,
// else don't print anything.
我用來達到此答案的代碼(PHP 5.6.2)。 顯然,由於我沒有要導入的CSV文件等而進行了調整。
<?php
$talente = array(0=>1,1=>3);
$csv[] = array(0=>"Schild", 1=>1, 2=>"Licht", 3=>"1w10", 4=>"-");
$csv[] = array(0=>"Schutz", 1=>1, 2=>"Licht", 3=>"1w10", 4=>"-");
$csv[] = array(0=>"Licht", 1=>4, 2=>"Licht", 3=>"1w10", 4=>"-");
$csv[] = array(0=>"Genesung",1=>1,2=>"Licht",3=>"-",4=>"-");
$csv[] = array(0=>"Aufopfern",1=>1,2=>"Licht",3=>"-",4=>"-");
$talentline = array_filter($csv, function($i) use ($talente) {
return in_array($i, $talente--);
}, ARRAY_FILTER_USE_KEY);
$talentline = array_filter($talentline);
print_r(array_values($talentline));
print isset($talentline[1][0]) ? $talentline[1][0]; : "";
print isset($talentline[2][0]) ? $talentline[2][0]; : "";
print isset($talentline[3][0]) ? $talentline[3][0]; : "";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.