PHP无论如何,我可以在函数的返回值上模拟数组运算符

时间:2009-07-31 15:10:26

标签: php arrays

  

可能重复:
  Any way to access array directly after method call?

在C#和其他语言中,我可以做这样的事情

$value = $obj->getArray()[0];

但不是PHP。任何变通办法,或者我注定要一直这样做?

$array = $obj->getArray();
$value = $array[0];

6 个答案:

答案 0 :(得分:1)

如果这是一次性或偶然的事情,你的例子中的情况成立,并且你正在检索返回数组的第一个元素,你可以使用:

$value = array_shift($obj->getArray());

如果这是一个普遍的需求,你经常需要检索除第一个(或最后一个,你可以使用array_pop())之外的元素,那么我会安排一个实用功能,如下所示:

function elementOf($array, $index = 0) {
    return $array[$index];
}
$value = elementOf($obj->getArray());
$otherValue = elementOf($obj->getArray(), 2);

答案 1 :(得分:1)

不,如果不使用array_shift(仅获取第一个元素),则无法执行此操作。如果你想访问第三或第四,你很可能想要这样的功能:

function elemnt($array, $element)
{
    return $array[$element];
}
$value = element($obj->getArray(), 4);

此外,请参阅此问题,因为它完全相同:Any way to access array directly after method call?

答案 2 :(得分:1)

我认为你注定要这样做:(

答案 3 :(得分:1)

你可以这样做:

$res = array_pop(array_slice(somefunc(1), $i, 1));

答案 4 :(得分:1)

好吧,也许这可以帮助你,在php spl中,非常有用,你可以为你制作一个特殊阵列:

<?php

class OArray extends ArrayObject{   
    public function __set($name, $val) {
        $this[$name] = $val;
    }
    public function __get($name) {
        return $this[$name];
    }
}

class O{

    function __construct(){
        $this->array = new OArray();
        $this->array[] = 1;
        $this->array[] = 2;
        $this->array[] = 3;
        $this->array[] = 4;
    }

    function getArray(){
        return $this->array;
    }

}
$o = new O();
var_dump( $o->getArray()->{1} );

答案 5 :(得分:0)

<?php
class MyArray implements Iterator ,ArrayAccess
{
    private $var = array();
     //--    ArrayAccess                        
    public function offsetSet($offset, $value) {
        if (is_null($offset)) {
            $this->var[] = $value;
        } else {
            $this->var[$offset] = $value;
        }
    }
    public function offsetExists($offset) {
        return isset($this->var[$offset]);
    }
    public function offsetUnset($offset) {
        unset($this->var[$offset]);
    }
    public function offsetGet($offset) {
        return isset($this->var[$offset]) ? $this->var[$offset] : null;
    }//--     Iterator
    public function __construct($array){
        if (is_array($array)) {
            $this->var = $array;
        }
    }
    public function rewind() {      
        reset($this->var);
    }
    public function current() {      
        return current($this->var);
    }
    public function key() {       
        return key($this->var);
    }
    public function next() {        
        return next($this->var);
    }
    public function valid() {     
        return ($this->current() !== false);
    }
}

$values = array(
            "one"   => 1,
            "two"   => 2,
            "three" => 3,
        );
$it = new MyArray($values);

foreach ($it as $a => $b) {
    print "$a: $b<br>";
}     
echo $it["one"]."<br>";?>