2017-02-19 31 views
2

У меня проблема с модификацией массива.PHP - добавление объекта со своими свойствами в массив

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

Этот код дает результат:

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

Я пытаюсь добавить еще один, [1], такой же тип объекта в этом массиве.

Я сделал класс для создания и добавления объекта:

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()); 

Это показывает тот же результат().

В конце концов, мне нужно отправить этот обновленный весь $ LINEITEM этой функции

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

Но кажется, что перед отправкой я не могу должным образом добавить объект в массив.

Заранее спасибо.

+1

Массивы в PHP могут иметь элементы разных типов. Ваш код должен работать, даже если объекты в массиве разные. Ищите другие проблемы в своем коде. –

+1

Строка, которую вы используете как для 'array_push', так и' print_r', - это метод, который только читается и используется для «получения» исключенных местоположений из вашего объекта. Он предложил бы мне, что ваша проблема заключается в том, что вы читаете с объекта и ничего не сохраняете для объекта. Попробуйте присвоить результат '... getExcludedLocations()' переменной, например '$ excludedLocations'. Затем 'array_push' этой переменной обновить. Затем верните эту переменную обратно в '... setExcludedLocations()' (используется для установки местоположений объекта) для обновления объекта. то вы можете передать объект обратно. – Luke

+0

Привет, Лука, Спасибо за ваш ответ. Я обновил, как вы сказали $ excludedLocations = $ lineItem-> getTargeting() -> getGeoTargeting() -> getExcludedLocations(); array_push ($ excludedLocations, $ location); если я напечатаю эту переменную, она отображает два элемента. Не могли бы вы рассказать мне, как мне нужно установить его для объекта, чтобы сохранить его? – Geobo

ответ

1

PHP возвращает массивы как значение, а не как ссылку. Это означает, что вы должны каким-то образом изменить измененное значение.

Глядя на library, по-видимому, в этом вопросе, кажется setExcludedLocations.

Так что ваш код должен быть что-то вроде:

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

Спасибо за ответ. Это было решением проблемы. – Geobo

 Смежные вопросы

  • Нет связанных вопросов^_^