2017-02-19 5 views
2

配列の変更に問題があります。PHP - 配列にプロパティを持つオブジェクトを追加する

Array 
(
    [0] => Google\AdsApi\Dfp\v201611\Location Object 
     (
      [id:protected] => 2250 
      [type:protected] => COUNTRY 
      [canonicalParentId:protected] => 
      [displayName:protected] => France 
     ) 
) 

私はこの配列へのオブジェクトの[1]、同じ種類、別のものを追加しようとしています:

foreach ($page->getResults() as $lineItem) { 
    print_r($lineItem->getTargeting()->getGeoTargeting()->getExcludedLocations()); 
} 

このコードは、結果を提供します。

Iは、オブジェクトを作成して追加するクラスを作った:

class Location{ 
    public function createProperty($propertyName, $propertyValue){ 
     $this->{$propertyName} = $propertyValue; 
    } 
} 

$location = new Location(); 
$location->createProperty('id', '2792'); 
$location->createProperty('type', 'COUNTRY'); 
$location->createProperty('canonicalParentId', ''); 
$location->createProperty('displayName', 'Turkey');  

array_push($lineItem->getTargeting()->getGeoTargeting()->getExcludedLocations(), $location); 

そして、私がしますprint_rに()関数

print_r($lineItem->getTargeting()->getGeoTargeting()->getExcludedLocations()); 

これを渡す場合は、同じ結果を示しています。最後に

は、私は、この関数に

$lineItems = $lineItemService->updateLineItems(array($lineItem)); 

をこの更新された全体の$のlineItemを送信する必要がある。しかし、私はきちんと配列にオブジェクトを追加することはできません送信する前のように思えます。

ありがとうございます。

+1

配列は、異なるタイプの要素を持つことができます。配列内のオブジェクトが異なる場合でも、コードは機能するはずです。あなたのコードの他の問題を探します。 –

+1

'array_push'と' print_r'の両方に使っている行は、読み込み専用で、オブジェクトから除外された場所を '取得 'するためのメソッドです。あなたの問題はあなたがオブジェクトから読み込み、オブジェクトに何も保存していないということを私に示唆します。 '... getExcludedLocations()'の結果を '$ excludedLocations'のような変数に代入してみてください。その変数に 'array_push'を実行して更新します。次に、その変数を '... setExcludedLocations()'(オブジェクト上の位置を設定するために使用)にコミットしてオブジェクトを更新します。オブジェクトをコミットすることができます。 – Luke

+0

こんにちはルーク、Thnanksあなたの返信です。 $ excludedLocations = $ lineItem-> getTargeting() - > getGeoTargeting() - > getExcludedLocations();というように更新しました。 array_push($ excludedLocations、$ location);この変数を表示すると、2つの要素が表示されます。あなたは私に教えてください、それを保存するためにそれに反対するようにそれを設定する必要がありますか? – Geobo

答えて

1

PHPは配列を参照としてではなく値として返します。つまり、何らかの形で修正された値を設定する必要があります。

明らかに問題のlibraryを見ると、その目的のためにsetExcludedLocationsメソッドがあるようです。

だからあなたのコードのようなものでなければなりません:PHPで

$geo_targeting = $lineItem->getTargeting()->getGeoTargeting(); 
$excluded_locations = $geo_targeting->getExcludedLocations(); 
array_push($excluded_locations, $location); 
$geo_targeting->setExcludedLocations($excluded_locations); 
+0

返信いただきありがとうございます。これが問題の解決策でした。 – Geobo

関連する問題