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

时间:2016-08-25 20:07:01

标签: php

class Test {

    public function results() {

      $return['first'] = 'one';
      $return['second'] = 'two';

      return $return;

    }

}

$test = new Test;

print_r($test->results()); // Returns entire array

我只想从数组中返回一个指定的元素,例如key" second"的值。如果没有在整个阵列返回之后进行筛选,我该怎么做?

4 个答案:

答案 0 :(得分:1)

  

我只想从数组中返回一个指定的元素,例如键“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
  

如果在返回后没有筛选整个数组,我该怎么做?

重要的是要注意,您不需要“筛选整个数组”来通过其键检索值。您知道密钥,因此您可以直接访问它。

答案 1 :(得分:1)

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),因为在非常结果的方法调用上创建它不是任何使用对象或目标编程。想象一下,如果数组是在结果方法中创建的,那么每次调用时新数组都位于内存中,这不是高效的,不是最优的,也不可能在类Test中修改这个数组。

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

最后我对命名风格的私人意见:

在命名方法名称时使用 camelCase

答案 2 :(得分:0)

在PHP 5.4及以上版本中:

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

在旧版本中,您不应该运行它们,因为它们没有安全维护:

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

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

答案 3 :(得分:0)

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

var request = require('request'),
    fs = require('fs'),
    masterStream = request('-- mp3 stream --')

var writeStream = fs.createWriteStream('recording.mp3'),
handler = function(bit){
   writeStream.write(bit);
}

masterStream.on('data', handler);
setTimeout(function(){
    masterStream.removeListener('data', handler);
    writeStream.end();
}, 1000 * 10);

如果方法/函数返回一个数组,则可以使用返回值完成相同的操作,无论是通过将返回值赋给变量还是使用该变量来按键取消引用值,或者使用function array dereferencing

$arr = ["foo" => "bar", "baz" => "quix"];

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

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

  1. 每次执行此功能(即没有备忘录
  2. 如果该键不存在或者该函数返回除数组以外的其他内容,则会出现错误
  3. 这意味着通常首先将返回值分配给变量然后为了安全而进行验证通常会更安全......除非您确定该函数将始终返回带有该键的数组并且您知道你不需要重复使用数组。