ArrayObject::exchangeArray

(PHP 5 >= 5.1.0, PHP 7)

ArrayObject::exchangeArrayExchange the array for another one

Descrierea

public ArrayObject::exchangeArray ( mixed $input ) : array

Exchange the current array with another array or object.

Parametri

input

The new array or object to exchange with the current array.

Valorile întoarse

Returns the old array.

Exemple

Example #1 ArrayObject::exchangeArray() example

<?php
// Array of available fruits
$fruits = array("lemons" => 1"oranges" => 4"bananas" => 5"apples" => 10);
// Array of locations in Europe
$locations = array('Amsterdam''Paris''London');

$fruitsArrayObject = new ArrayObject($fruits);

// Now exchange fruits for locations
$old $fruitsArrayObject->exchangeArray($locations);
print_r($old);
print_r($fruitsArrayObject);

?>

Exemplul de mai sus va afișa:

Array
(
    [lemons] => 1
    [oranges] => 4
    [bananas] => 5
    [apples] => 10
)
ArrayObject Object
(
    [0] => Amsterdam
    [1] => Paris
    [2] => London
)

add a note add a note

User Contributed Notes 3 notes

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
       
)
)
?>
up
6
Dmitri Snytkine
15 years ago
It seems that input array is always passed by reference.
For example if you have an existing array
$array with some values
then you have an arrayobject $o
and then you do this:
$o->exchangeArray($array);
$o->offsetSet('somekey', 'some value');

Now if you check your $array array, it will have
a key 'somekey' with value of 'some value'

I totally did not expect that, I am sure it was a mistake to pass array by reference by default.
up
0
ievgen dot varava at spryker dot com
3 years ago
Looks like PHP8 brings undocumented change to this method signature. Example:

<?php
interface intA {
    public function
exchangeArray($param);
}

class
classB extends ArrayObject implements intA {}
?>

PHP 7.4.13: no errors

PHP 8.0.0: Fatal error:  Declaration of ArrayObject::exchangeArray(object|array $array) must be compatible with intA::exchangeArray($param)
To Top