ArrayObject::exchangeArray

(PHP 5 >= 5.1.0, PHP 7)

ArrayObject::exchangeArrayExchange the array for another one

Opis

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

Exchange the current array with another array or object.

Parametry

input

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

Zwracane wartości

Returns the old array.

Przykłady

Przykład #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);

?>

Powyższy przykład wyświetli:

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 2 notes

up
4
Dmitri Snytkine
11 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
3
Corentin Larose
6 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