PHP:如何从类返回的数组中获取单个值


PHP: How to get single value from array that was returned from a class?

class Test {
    public function results() {
      $return['first'] = 'one';
      $return['second'] = 'two';
      return $return;
    }
}
$test = new Test;
print_r($test->results()); // Returns entire array

我只想从数组中返回一个指定的元素,比如键"second"的值。如何在返回后不筛选整个数组的情况下完成此操作?

我只想从数组中返回一个指定的元素,比如键"second"的值

传入一个参数来标识要返回的元素,并返回该元素(例如,如果不存在,则返回false(;

public function results($key = null)
{
    $return['first'] = 'one';
    $return['second'] = 'two';
    // check the key exists
    if (!array_key_exists($key, $return)) {
        return false;
    }
    return $return[$key];
}

然后:

print_r($test->results('second')); // two

如何在返回后不筛选整个数组的情况下完成此操作?

需要注意的是,您不需要"筛选整个数组"来按键检索值。你知道密钥,所以你可以直接访问它。

class Test {
  private $arr; //private property of object
  __construct(){
    //create arr in constructor   
    $this->arr=[];//create new array
    $this->arr['first'] = 'one';
    $this->arr['second'] = 'two';
  }
  /**
  /* get array
  **/
  public function getResults(){
     return $this->arr;
  }
  /**
  /* get single array element
  **/
  public function getResult($key) {
     return isset($this->arr[$key])?$this->arr[$key]:null;//return element on $key or null if no result
  }
}
$test = new Test();
print_r($test->getResult("second")); // Returns array element
//or second possibility but the same result
print_r($test->getResults()["second"]); // Returns array element

少数建议:

在构造函数中创建数据结构(在这种特殊情况下为$arr(,因为在非常结果的方法调用中创建它不是任何类型的使用对象或目标编程。想象一下,如果数组是在results方法中创建的,那么在每次调用时,新的数组都位于内存中,这是无效的,不是最优的,并且不可能在类Test中修改这个数组。

下一步,在方法结果中添加参数,只获取所需的密钥,并将所有数组隐藏在私有类属性$arr中,以将其封装在对象中。

最后一点我个人对命名风格的看法是:

命名方法名称时使用camelCase

在PHP中,数组值可以通过其键从数组中取消引用。

$arr = ["foo" => "bar", "baz" => "quix"];
echo $arr["foo"]; // gives us "bar"
echo $arr["baz"]; // gives us "quix"

如果方法/函数返回一个数组,则可以对返回值执行相同的操作,无论是将返回值分配给变量并使用该变量按键取消引用该值,还是使用函数数组取消引用。

class Test {
    public function results() {
      return ["foo" => "bar", "baz" => "quix"];
    }     
}
$test = new Test;
$arr = $test->results();
echo $arr["foo"]; // gives us "bar"
echo $arr["baz"]; // gives us "quix"
// Using FAD (Function Array Dereferencing)
echo $test->results()["foo"]; // gives us "bar"
echo $test->results()["baz"]; // gives us "quix"

当然,使用函数数组去引用有两个重要的注意事项。

  1. 每次执行该功能时都会执行(即无内存(
  2. 如果键不存在,或者函数返回的不是数组,则会出现错误

这意味着,为了安全起见,通常更安全的做法是先将返回值分配给变量,然后在那里进行验证。。。除非您确信函数总是返回一个带有该键的数组,并且您知道不需要重用该数组。

在PHP 5.4及以上版本中:

print_r($test->results()['second']);

在旧版本中,你不应该运行,因为它们脱离了安全维护:

$results = $test->results();
print_r($results['second']);

编辑:第一个例子最初说5.6及以上,但数组取消引用是在5.4中引入的!为避免疑义,5.6是安全维护中的最低php版本。