PHP 8.4.2 Released!

ArrayObject::exchangeArray

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

ArrayObject::exchangeArrayЗаменяет массив на другой

Описание

public ArrayObject::exchangeArray(array|object $array): array

Метод заменяет текущий массив (array) на другой массив (array) или объект (object).

Список параметров

array

Новый массив (array) или объект (object) для замены текущего массива.

Возвращаемые значения

Метод возвращает старый массив (array).

Примеры

Пример #1 Пример использования метода ArrayObject::exchangeArray()

<?php

// Массив с количеством фруктов
$fruits = array("lemons" => 1, "oranges" => 4, "bananas" => 5, "apples" => 10);

// Массив мест в Европе
$locations = array('Amsterdam', 'Paris', 'London');

$fruitsArrayObject = new ArrayObject($fruits);

// Теперь заменим фрукты на места
$old = $fruitsArrayObject->exchangeArray($locations);
var_dump($old);
var_dump($fruitsArrayObject);
?>

Результат выполнения приведённого примера:

array(4) {
  ["lemons"]=>
  int(1)
  ["oranges"]=>
  int(4)
  ["bananas"]=>
  int(5)
  ["apples"]=>
  int(10)
}
object(ArrayObject)#1 (1) {
  ["storage":"ArrayObject":private]=>
  array(3) {
    [0]=>
    string(9) "Amsterdam"
    [1]=>
    string(5) "Paris"
    [2]=>
    string(6) "London"
  }
}

Добавить

Примечания пользователей 1 note

up
4
Corentin Larose
10 years ago
It's worth notting that ArrayObject::exchangeArray() doesn't call ArrayObject::offsetSet() internally for each offset/property of the array/object provided in argument.

It's also worth noting the let's say "unexpected" behavior of get/set:

<?php
class MyArrayObject extends ArrayObject
{
public function
offsetSet($name, $value)
{
parent::offsetSet($name . '_control', $value);
parent::offsetSet($name, $value);
}
}

$test = new MyArrayObject();
$test->setFlags(\ArrayObject::ARRAY_AS_PROPS);
$test['my_value_1'] = 1;
$test['my_value_1'] = $test['my_value_1'] + 1;
$test['my_value_1'] += 1;
$test['my_value_1'] ++;
++
$test['my_value_1'];

$test->my_value_2 = 1;
$test->my_value_2 = $test->my_value_2 + 1;
$test->my_value_2 += 1;
$test->my_value_2 ++;
++
$test->my_value_2;

print_r($test);

// Prints out:
MyArrayObject Object
(
[
storage:ArrayObject:private] => Array
(
[
my_value_1_control] => 3
[my_value_1] => 5
[my_value_2_control] => 2
[my_value_2] => 5
)
)
?>
To Top