请了解一些与php中的array_reverse相关的代码

时间:2013-04-22 09:29:35

标签: php

<?php
class ExtendedArrayObject extends ArrayObject {
    private $_array;
    public function __construct()
    {
        if (is_array(func_get_arg(0)))
            $this->_array = func_get_arg(0);
        else
            $this->_array = func_get_args();
        parent::__construct($this->_array);
    }

    public function reverse($applyToSelf=false)
    {
        if (!$applyToSelf)
        {
            return array_reverse($this->_array);
        }
        else
        {
            $_array = array_reverse($this->_array);
            $this->_array = $_array;
            parent::__construct($this->_array);
            return $this->_array;
        }
    }
}
$newArray = new ExtendedArrayObject(array(1,2,3,4,5,6));
print_r($newArray->reverse()); //reverse the array
...
?>

以上代码摘自一本书。

问题:

我将代码更改为print_r($newArray->reverse(true)); 但输出是一样的。所以既然输出是相同的,为什么我们需要使用if ... else ...?在哪种情况下,为什么我们需要这个其他部分?

感谢。

4 个答案:

答案 0 :(得分:0)

与可变状态有关。

else部分允许一个崇拜数组的返回值,同时保留原始数组的原始数组

<?php
$newArray1 = new ExtendedArrayObject(array(1,2,3,4,5,6));
$revArray1 = $newArray->reverse();

print_r($newArray1); // 1, 2, 3, 4, 5, 6
print_r($revArray1); // 6, 5, 4, 3, 2, 1

$newArray2 = new ExtendedArrayObject(array(1,2,3,4,5,6));
$revArray2 = $newArray->reverse(true);

print_r($newArray2); // 6, 5, 4, 3, 2, 1
print_r($revArray2); // 6, 5, 4, 3, 2, 1

答案 1 :(得分:0)

输出LOOKS相同,但它完全不同。

尝试此而不是当前的print_r:

print_r($newArray);
print_r($newArray->reverse());
print_r($newArray);
print_r($newArray->reverse(true));
print_r($newArray);

请参阅?这是非常不同的!

答案 2 :(得分:0)

不同之处在于,对于错误情况,反转数组未分配给私有变量$_array。对于真实情况,它被分配。

$array = new ExtendedArrayObject(array(1,2,3,4,5,6));

//false case
$reversed_array1 = $array->reverse();
var_dump($reversed_array1);//6,5,4,3,2,1
var_dump($array);//1,2,3,4,5,6

//true case
$reversed_array2 = $array->reverse(true);
var_dump($reversed_array2);//6,5,4,3,2,1
var_dump($array);//6,5,4,3,2,1

答案 3 :(得分:0)

使用$applyToSelf,您的数组会被永久更改,因此如果您稍后在程序中引用它,您将使用反向数组。

没有$applyToSelf,它不是,所以你只是为了一次性使用而返回一个反向数组。