1

我有一个使用 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 并且正在尝试在这里做类似的事情,请继续尝试,如果您有更优雅的方法,我会全力以赴。

谢谢你。

4

1 回答 1

0
array_push($dataImage, $dataImage['id'] = $photo->getContentId(), $dataImage['image'] = "/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg");

这会将这些分配的结果放入 $dataImage 数组中。$dataImage['id'] 和 $dataImage['image'] 仍将包含最后一个图像 id 和源。

您可能想尝试以下方法:

$dataImage[$photo->getContentId()] = "/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg";

然后,遍历 $dataImage:

foreach ($dataImage as $key => $value) {
    echo $key + ": " + $value;
}

编辑:这是使用关联数组数组的示例:

function downloadPhotos($results, $rets) {
    $allDataImages = 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());
                    $dataImage = array();
                    $dataImage['id'] = $photo->getContentId();
                    $dataImage['image'] = "/var/www/html/mls-search/search-ui/public/img/{$photo->getContentId()}-{$photo->getObjectId()}.jpg";
                    $allDataImages[] = $dataImage;
                }
            }
        }
    }
    file_put_contents("/var/www/html/mls-search/search-ui/public/propimg.json", json_encode($allDataImages));
}
于 2019-08-29T17:32:49.223 回答