我知道之前已发布了许多非常相似的foreach
问题,但我无法找到答案。我确信这是在同名的问题汤中的某个地方。
我在脚本中使用this ESRI shapefile reader class,我有这个功能:
function csv_generate($shapefile){
$startTime=microtime(1);
$imported=new ShapeFile($shapefile,array('noparts'=>false));
$names=explode('/',$shapefile);
$output=fopen('output/'.$names[count($names)-1].'.csv','w');
while($object=$imported->getNext()){
$data=$object->getDbfData();
file_put_contents('output/'.$names[count($names)-1].'.txt',implode("\t",array_keys($data)));
$shape=$object->getShpData();
$shapes=array();
/*LINE 246*/ foreach($shape['parts'] as $poly){
$points=array();
foreach($poly['points'] as $point){
$temp=round_away($point['x']).','.round_away($point['y']);
if(isset($points[count($points)-1])&&$points[count($points)-1]!==$temp)$points[]=$temp;
}
$shapes[]=implode(';',$points);
}
/*LINE 254*/ fputs($output,implode("\t",$data)."\t".$shape['numparts']."\t".implode("\t",$shapes)."\r\n");
}
fclose($output);
}
运行此代码会产生:
Notice: Undefined offset: "parts" in [...] on line 246
Warning: Invalid argument supplied for foreach() in [...] on line 246
Notice: Undefined offset: "numparts" in [...] on line 254
好的,所以我必须把钥匙搞错了。轻松修复,对吗?没有。当然不是。
var_dump
$shape
的结果是:
array(7) { [...] ["numparts"]=> int(1) [...] ["parts"]=> array(1) { [0]=> array(1) { ["points"]=> array(175) { [0]=> array(2) { ["x"]=> [...]
我尝试将foreach
循环重写为以下内容:
foreach($shape as $key=>$value){
if($key=='parts'){
[...]
我尝试使用array_values
并通过数字键在元素上运行循环。
我尝试将所有变量重命名为完全随机的字符串。
可能会发生什么?