Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复制对象的最佳方式';s受保护成员';将数据存储到数组中_Php - Fatal编程技术网

Php 复制对象的最佳方式';s受保护成员';将数据存储到数组中

Php 复制对象的最佳方式';s受保护成员';将数据存储到数组中,php,Php,*在确定下划线问题后编辑了我的问题。 非常感谢帮助诊断该问题的choz* *说明* 我有一个有两个成员的类,它们分别保存相册数据和照片数据。 在构造函数中,我使用从DB查询中提取的数据填充它们。 这些查询返回一个具有数组的对象,该数组是该对象的受保护成员 我试图向持有关联数组的对象中添加一个新的键和值,错误地将其视为一个数组。 未设置这些新键和值。可能是因为对象的数组成员受到保护。 请参见下面的var dump,其中对象转储以开始: [“数据”:受保护]。 这就是问题所在吗?如果是这样的话,如何

*在确定下划线问题后编辑了我的问题。
非常感谢帮助诊断该问题的choz*

*说明* 我有一个有两个成员的类,它们分别保存相册数据和照片数据。 在构造函数中,我使用从DB查询中提取的数据填充它们。 这些查询返回一个具有数组的对象,该数组是该对象的受保护成员

我试图向持有关联数组的对象中添加一个新的键和值,错误地将其视为一个数组。 未设置这些新键和值。可能是因为对象的数组成员受到保护。 请参见下面的var dump,其中对象转储以开始: [“数据”:受保护]。 这就是问题所在吗?如果是这样的话,如何才能最好地创建我自己的副本,我可以自由操作

/****** Class  Memebers ********/ 
//Object with array of associative album arrays.
//Each inner album array is defined by unique key ='albumID'.
private $member_albums; 


//array of objects holding associative photo arrays.
//Each inner photo array is defined by unique key ='albumID'.
private $member_photos;     
这是用于添加键和值的方法-

/*
* For each photo in each album, we will add a new key and value.  
* key = 'img_url', value is an array with structure of 
* ['S']['{url pointing to this photo in storage}'] where 'S' is the 
* key (representing a string value) and value is the url string.  
*/
private function add_Photo_Url_To_Photos_Data_Array(){

  // If data was retrieved from DB without errors
  // because query fail returns false.
  if( $this->member_albums && $this->member_photos){

    // If user has albums - because 'Count' is always 0 or
    // greater, representing the number of inner arrays
    if($this->member_albums['Count'] > 0 ){ 

        // For number of albums
        foreach ($this->member_albums['Items'] as $albumArr) {

            // Current album ID 
            $curr_AlbumId = $albumArr['albumID']['S'];                  

            // If current album contains photos
            if( $this->member_photos[$curr_AlbumId]['Count'] > 0){                                              

                // For each photo in this album
                foreach( $this->member_photos[$curr_AlbumId]['Items'] as &$photosArr) {

                    // method that creates a url from photo data- returns string url                                                                                    
                    $url = $this->build_Photo_Url($photosArr, $curr_AlbumId);                                                       

                    // Insert new key = 'img_url' and value into the array.                                                                                 
                    // new value is itself an array with key ['S']  
                    // signifying a string and value $url   
                    $photosArr['img_url'] = array('S' =>
                    $url);

                    // this echo shows key and value were added
                    // correctly into $photosArr
                    echo ' <br>Img URL = ' . $photosArr['img_url']['S'];                                                            
                }                   
            }                                   
        }
    }
}
var\u dump($this->member\u photos)


Jay,在阅读所有注释并对您使用的
模型进行基本搜索后,您的对象支持
toArray()
函数,该函数将以数组格式返回数据,而不包含
受保护的
成员

以下是参考资料:

首先,尝试运行
var_dump(get_class_方法($this->member_相册))
查看它将返回什么类型的方法。我确信有一个内置的
toArray()
函数,主要是因为它是一个响应,所以它们可以让您轻松提取和操作数据


首先尝试
var\u dump()
,然后尝试执行以下
$clearArr=$this->member\u albums->toArray()
和print_r/var_dump
$clearArr
,它将生成标准多维数组。

您能分享数据库结果的结构吗?在
$photosArr['img_url']=array('S'=>$url)之后的最后一个
echo
。结果是什么?Img URL={正确的存储http地址}/{正确的存储桶名称}/{正确的用户id}/album_1/{正确的文件名}等等,我不明白你的问题。。哪一部分又出问题了?那么你的预期结果是什么呢?我相信这是因为你没有通过引用来循环成员相册。。所以这行
foreach($this->member\u albums['Items']作为$albumArr){
应该是
foreach($this->member\u albums['Items']作为&$albumArr){
object(Guzzle\Service\Resource\Model)#88 (2) { 
["structure":protected]=> NULL ["data":protected]=> array(3) { 
    ["Count"]=> int(2) 
    ["Items"]=> array(2) { 
        [0]=> array(7) { 
            ["PlaceLong"]=> array(1) { ["N"]=> string(1) "0" } 
            ["AlbumId"]=> array(1) { ["S"]=> string(7) "album_1" } 
            ["Title"]=> array(1) { ["S"]=> string(5) "Test1" } 
            ["UserId"]=> array(1) { ["S"]=> string(36) "810725E5-D235-43F7-AA50-4CCDACD6AB36" } 
            ["Year"]=> array(1) { ["N"]=> string(1) "0" } 
            ["PlaceLat"]=> array(1) { ["N"]=> string(1) "0" } 
            ["Timestamp"]=> array(1) { ["N"]=> string(16) "472572846.470462" } 
        }
array(2) { 
["album_1"]=> object(Guzzle\Service\Resource\Model)#89 (2) { 
["structure":protected]=> NULL ["data":protected]=> array(3) { 
    ["Count"]=> int(5) 
    ["Items"]=> array(5) { 
        [0]=> array(8) { 
            ["ShotId"]=> array(1) { ["S"]=> string(6) "Photo2" } 
            ["AlbumId"]=> array(1) { ["S"]=> string(7) "album_1" } 
            ["UserId"]=> array(1) { ["S"]=> string(16) "1111-11111-11111" } 
            ["Year"]=> array(1) { ["N"]=> string(1) "0" } 
            ["Discovery"]=> array(1) { ["N"]=> string(1) "0" } 
            ["Timpstamp"]=> array(1) { ["N"]=> string(14) "472572840.3845" } 
            ["ExtractedPhotoId"]=> array(1) { ["S"]=> string(32) "Photo2_0-0-746-0-0-1000-746-1000" } 
            ["ManualEdit"]=> array(1) { ["N"]=> string(1) "0" } 
        }