我有一个csv文件,试图将其转换为其他结构化数组。首先,我将其转换为一个名为all_data()的数组,其结构如下:
$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注意: 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);
我知道针对同一错误发布了很多问题,但是我无法弄清楚这段特定代码的问题。
最佳答案
这就是问题:
[4]=>
array(1) {
[0]=>
string(0) ""
}
只需检查数据是否已设置,然后将其添加到
$im_arr
中,该数据是否为空:foreach ($all_data as $key => $value) {
if (isset($value[0]) && isset($value[1]) && !empty($value[0]) && !empty($value[1])) {
$im_arr[$key][$value[0]] = $value[1];
}
}
关于php - PHP错误: Undefined offset error within foreach loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13400414/