我有一个使用 RETS 从服务器下载照片的功能。我想获取照片的路径并将它们存储在 JSON 文件中以显示在轮播上。数组函数位于 foreach 循环中,它会初始化,但一次只能存储一个对象。每次循环遍历对象时,它都会破坏前一个对象并仅存储新对象。
function downloadPhotos($results, $rets) {
if (is_null($results) == false) {
$all_IDs = $results->lists('Matrix_Unique_ID');
foreach ($all_IDs as $Id) {
if(!file_exists("/var/www/html/mls-search/search-ui/public/img/")){
mkdir("/var/www/html/mls-search/search-ui/public/img/");
}
$photos = $rets->GetObject('Property', 'XLargePhoto', $Id, '*', 0);
foreach ($photos as $photo) {
if ($photo->isError() == false ) {
file_put_contents("/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg", $photo->getContent());
$dataImage = array();
$dataImage['id'] = $photo->getContentId();
$dataImage['image'] = "/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg";
file_put_contents("/var/www/html/mls-search/search-ui/public/propimg.json", json_encode($dataImage));
}
}
}
}
}
正如我上面所说的,实际结果是每次循环遍历一个对象时它都会破坏前一个并存储新的。期望的结果是它只会在每次新迭代时附加数组。
谢谢你。
编辑:使用现在似乎正在运行的解决方案更新了代码:
function downloadPhotos($results, $rets) {
$dataImage = array();
if (is_null($results) == false) {
$all_IDs = $results->lists('Matrix_Unique_ID');
$dataImage = array();
foreach ($all_IDs as $Id) {
if(!file_exists("/var/www/html/mls-search/search-ui/public/img/")){
mkdir("/var/www/html/mls-search/search-ui/public/img/");
}
$photos = $rets->GetObject('Property', 'XLargePhoto', $Id, '*', 0);
foreach ($photos as $photo) {
if ($photo->isError() == false ) {
file_put_contents("/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg", $photo->getContent());
array_push($dataImage, $dataImage['id'] = $photo->getContentId(), $dataImage['image'] = "/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg");
file_put_contents("/var/www/html/mls-search/search-ui/public/propimg.json", json_encode($dataImage));
}
}
}
}
}
编辑 2
我对第一个更新的代码有问题。JSON 文件不断为键分配数值,而不是我需要的“id”和“images”键。对 array_push() 做了更多的修改,我终于得到了我需要的结果:
function downloadPhotos($results, $rets) {
$dataImage = array();
if (is_null($results) == false) {
$all_IDs = $results->lists('Matrix_Unique_ID');
foreach ($all_IDs as $Id) {
if(!file_exists("/var/www/html/mls-search/search-ui/public/img/")){
mkdir("/var/www/html/mls-search/search-ui/public/img/");
}
$photos = $rets->GetObject('Property', 'XLargePhoto', $Id, '*', 0);
foreach ($photos as $photo) {
if ($photo->isError() == false ) {
file_put_contents("/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg", $photo->getContent());
array_push($dataImage, $dataImage[] = array("id" => $photo->getContentId(), "images"=>"/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg"));
file_put_contents("/var/www/html/mls-search/search-ui/public/propimg.json", json_encode($dataImage));
}
}
}
}
}
输出:
{
"id": "22128021",
"images": "\/var\/www\/html\/mls-search\/search ui\/public\/img\/22128021-0.jpg"
},
{
"id": "22128021",
"images": "\/var\/www\/html\/mls-search\/search ui\/public\/img\/22128021-0.jpg"
},
{
"id": "22128021",
"images": "\/var\/www\/html\/mls-search\/search ui\/public\/img\/22128021-1.jpg"
}
最终编辑
我最后一次运行是在 JSON 文件中复制密钥。显然不理想。我发现是因为我在array_push函数中调用了两次$dataImage。当我取出那个额外的参数时,我不断收到来自 PHP 的警告,说它需要两个参数。我的工作是制作一个虚拟数组并将其粘贴在 array_push 函数中。
诚然,我怀疑这不是好的代码。但是鉴于我现在对此拥有的知识量,这是我得到的解决方法,我现在得到了预期的结果。
代码:
function downloadPhotos($results, $rets) {
$dummyImage = array();
if (is_null($results) == false) {
$all_IDs = $results->lists('Matrix_Unique_ID');
foreach ($all_IDs as $Id) {
if(!file_exists("/var/www/html/mls-search/search-ui/public/img/")){
mkdir("/var/www/html/mls-search/search-ui/public/img/");
}
$photos = $rets->GetObject('Property', 'XLargePhoto', $Id, '*', 0);
foreach ($photos as $photo) {
if ($photo->isError() == false ) {
file_put_contents("/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg", $photo->getContent());
array_push($dummyImage, $dataImage[] = array("id" => $photo->getContentId(), "images"=>"/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg"));
file_put_contents("/var/www/html/mls-search/search-ui/public/propimg.json", json_encode($dataImage));
}
}
}
}
}
这个帖子显然已经被锁定了。即使给出解释,我也不清楚它被锁定的原因,但我会说:如果有人出现在这个线程上,我不推荐这个解决方案。请遵循评论中的一些建议并进行调查。考虑到我正在使用的程序来检索和处理这些数据,这就是我觉得我必须做的事情。
如果您正在使用 PHRETS 并且正在尝试在这里做类似的事情,请继续尝试,如果您有更优雅的方法,我会全力以赴。
谢谢你。