我有一個csv文件,我試圖變成一個不同的結構化數組。首先,我把它變成一個數組命名all_data()這樣的構造:PHP的錯誤:在foreach循環內未定義的偏移量錯誤
$data = file_get_contents($id . '.csv');
$data_array = explode("\n", $data);
foreach($data_array AS $data){
$all_data[] = explode("\t", $data);
}
結果是這樣的:
array(5) {
[0]=>
array(2) {
[0]=>
string(10) "2012-11-14"
[1]=>
string(2) "10"
}
[1]=>
array(2) {
[0]=>
string(10) "2012-11-14"
[1]=>
string(2) "10"
}
[2]=>
array(2) {
[0]=>
string(10) "2012-11-14"
[1]=>
string(2) "10"
}
[3]=>
array(2) {
[0]=>
string(10) "2012-11-14"
[1]=>
string(2) "10"
}
[4]=>
array(1) {
[0]=>
string(0) ""
}
}
然後,我把它變成im_arr()用下面的代碼:
foreach($all_data as $key => $value){
$im_arr[$key][$value[0]] = $value[1];
}
結果:
array(5) {
[0]=>
array(1) {
["2012-11-14"]=>
string(2) "10"
}
[1]=>
array(1) {
["2012-11-14"]=>
string(2) "10"
}
[2]=>
array(1) {
["2012-11-14"]=>
string(2) "10"
}
[3]=>
array(1) {
["2012-11-14"]=>
string(2) "10"
}
[4]=>
array(1) {
[""]=>
NULL
}
}
然後,終於另一個foreach循環給我,結果我要找:
foreach ($im_arr as $val) {
foreach ($val as $key => $val2) {
$im_data[$key]=$val2;
}
}
有了結果爲im_data()是:
array(2) {
["2012-11-14"]=>
string(2) "10"
[""]=>
NULL
}
這將是完美的,因爲數組im_data( )正是我想要從all_data()中解脫出來的。但是,當我試圖將此代碼放在程序的另一部分中時,它不起作用,我認爲這可能是因爲我收到了警告:
「PHP Notice:Undefined offset:1 in。 .. 93" 行
93號線對應於這一行:
$im_arr[$key][$value[0]] = $value[1];
這裏是代碼的完整部分:
$all_data = array();
$im_arr=array();
$data = file_get_contents($id . '.csv');
$data_array = explode("\n", $data);
foreach($data_array AS $data){
$all_data[] = explode("\t", $data);
}
foreach($all_data as $key => $value){
$im_arr[$key][$value[0]] = $value[1]; //the line for the error
}
$im_data=array();
foreach ($im_arr as $val) {
foreach ($val as $key => $val2) {
$im_data[$key]=$val2;
}
}
var_dump($im_data);
我知道有很多很多問題p osted爲同樣的錯誤,但我無法弄清楚這個特定的代碼的問題。
在向其添加密鑰之前創建子數組。 'if(!array_key_exists($ key,$ im_arr)){$ im_arr [$ key] = array(); ''。或者MarcB說,你的一些價值觀的格式不正確。 – DCoder
你的文件中至少有一行沒有'\ t',給你至少有一個沒有'1'索引的$ all_data條目。 –
這很有道理,但我仍然得到相同的錯誤通知。 – midde