当参数绝对是一个数组时,foreach()报告无效参数

时间:2013-05-09 01:38:44

标签: php arrays foreach indices

我知道之前已发布了许多非常相似的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并通过数字键在元素上运行循环。

我尝试将所有变量重命名为完全随机的字符串。

可能会发生什么?

0 个答案:

没有答案