1、重新采集后章节和目录报错 2018/10/3
Warning: Invalid argument supplied for foreach() in /usr/share/wwwphp/ptcms/application/novelsearch/model/novelsearch_chapter.php on line 326
vim /usr/share/wwwphp/ptcms/application/novelsearch/model/novelsearch_chapter.php
public function getolist($zym_38, $zym_27 = 1, $zym_11 = 0)
{ $zym_49 = 'chapterolist_' . $zym_38; $zym_52 = $this->cache->get($zym_49);
if (APP_DEBUG || !$zym_52)
{ $this->setTableId($zym_38);
if ($zym_11 == 0)
{ $zym_52 = $this->where(array('novelid' => $zym_38, 'oid' => array('>', 0)))->group('oid')->field('oid,name,time,url,id')->order('oid asc')->select();
} else
{ $zym_52 = $this->where(array('novelid' => $zym_38, 'oid' => array('>', 0)))->group('oid')->field('oid,name,time,url,id')->order('oid asc')->page($zym_27)->pagesize($zym_11)->select();
}
$zym_13 = $this->get('novelsearch_info', $zym_38, 'novel.pinyin');
foreach ($zym_52 as &$zym_47)
{ $zym_47['url_read'] = U('novelsearch.chapter.read', array('novelid' => $zym_38, 'novelkey' => $zym_13, 'chapterid' => $zym_47['oid']));
}
$this->cache->set($zym_49, $zym_52, 900);
}
return $zym_52;
}
<?php $a =&$b ?>
这意味着 $a 和 $b 指向了同一个变量。
注: $a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一个地方
怀疑问题出在&引用上。
/*
foreach 结构,这只是一种遍历数组简便方法。
foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种是第一种的有用的扩展。
foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只是除了当前单元的值以外,键值也会在每次循环中被赋给变量 $key。看下面代码:
$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
echo $key."=>".$value."\n";
}
结果如下:
1=>111
2=>222
3=>333
键值这里可以理解为数组下标,数组元素a[2]的下标就是2.
当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。而while循环需要reset。下面两种代码功能完全相同。
1.用while循环
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>\n";
}
2.用foreach
foreach ($arr as $value) {
echo "Value: $value<br>\n";
}
此外注意 foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此即使有 each() 的构造,原数组指针也没有变,数组单元的