我知道之前已经发布了许多极其相似foreach
的问题,但我一直无法找到答案。我敢肯定它在同名问题的汤中的某个地方。
我在脚本中使用这个 ESRI shapefile 阅读器类,我有这个功能:
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
ing的结果$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
通过数字键在元素上使用和运行循环。
我尝试将所有变量重命名为完全随机的字符串。
可能会发生什么?