在C#和其他语言中,我可以做这样的事情
$value = $obj->getArray()[0];
但不是PHP。任何变通办法,或者我注定要一直这样做?
$array = $obj->getArray();
$value = $array[0];
答案 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>";?>