题
只是我今天注意到一个奇怪的行为在一个对象模型,该模型是以前的工作就好了(我已经检查的一切可能的和什么有关其结构已经改变了,所以我怀疑改变PHP版本,并想知道如果任何人有体验任何类似的东西)
直到最近,我可以设置键的对象的性别阵列。具体implememation这在我的一个模型是包含在一个画廊类,这样的:
public function __construct($gid){
parent::__construct($gid);
$this->Photos = $this->getPhotos();
$this->AlbumCover = $this->getCover();
}
public function getPhotos(){
$sql = 'SELECT GalleryPhotoID FROM GalleryPhoto WHERE GalleryID = ?';
$params = array($this->GalleryID);
$allids = DatabaseHandler::GetAll($sql, $params);
$output = array();
foreach($allids as $id){
$gp = new GalleryPhoto($id['GalleryPhotoID']);
$output[$gp->GalleryPhotoID] = $gp;
}
return $output;
}
相关的部分省略了。
基本上,我可以设置阵键的画廊的照片的对象的个人照片的身份证数据库中。这只是使它更容易代码个迭代和作出整件事情的运行顺畅。
现在,无论我怎么集的关键,自动整数时产生的foreach运行。我甚至试着打字一个字符串中,理论上应该取代每次迭代,但我仍然有增加,自动整数键的财产的照片。
[Photos] => Array
(
[0] => GalleryPhoto Object
(
[GalleryID] => 9
[Caption] =>
[Orientation] => 0
[AlbumCover] =>
[DateAdded] => 2011-01-03 16:58:51
[GalleryPhotoID] => 63
[Thumbnail] =>
[Image] =>
[src] => http://..com/galleryImage/getImage/63
)
[1] => GalleryPhoto Object
(
[GalleryID] => 9
[Caption] =>
[Orientation] => 0
[AlbumCover] =>
[DateAdded] => 2011-01-03 16:58:51
[GalleryPhotoID] => 64
[Thumbnail] =>
[Image] =>
[src] => http://..com/galleryImage/getImage/64
)
)
具有专项能手动设置键内的一个目的财产,这是一系列被删除,在一些次要释放我不知道的吗?我已经google搜索一切都过去了,看过的PHP手册网站,并发现没有答案。有任何人经历了任何类似的东西?是否有更好的方法我考虑?我只是真的很了这一点,因为它使得更容易实施一下之前的系统通过的ajax请求回来下一个合乎逻辑的id(铭记id可以删除的之间的!)
谢谢!
解决方案
我没有看到任何东西错了什么,你有,我从来没有经验丰富的行为描述。然而,一个快速的解决方案可能是代替分配符合这样的事情:
$output[$id['GalleryPhotoID']] = $gp;
你也可以 echo $gp->GalleryPhotoID;
要确保 GalleryPhotoID
酒店实际上可以访问的方式。
最后,你说你替换上述行与一个类似于:
$output['foobar'] = $gp;
它还创建了一个新的条目,与整键,对于每一个入口?如果是这种情况,那么我认为可能有些东西在你的代码省略这是造成问题。
其他提示
一路脸部。新年的流出物必须仍然在我的大脑中,否则我会注意到,如果没有专辑Copover Proterty的照片,我添加的功能以获取专辑封面缩略图将阵列改组!
private function getCover(){
foreach($this->Photos as $ind=>$p){
if($p->AlbumCover){
return $this->Photos[$ind];
}
}
shuffle($this->Photos); //this is the problem
return current($this->Photos);
}
我对此进行了修改,只是制作变量和随机混音的本地副本,如果没有设置封面。
private function getCover(){
foreach($this->Photos as $ind=>$p){
if($p->AlbumCover){
return $this->Photos[$ind];
}
}
$Photos = $this->Photos;
shuffle($Photos);
return current($Photos);
}
由于您的警告使我陷入了错误,我接受并张贴了答案和评论。多谢你们!