【问题标题】:How do you search for an instance of a class in php你如何在php中搜索一个类的实例
【发布时间】:2018-08-21 15:21:21
【问题描述】:

我正在尝试在 PHP 中搜索一个类的实例,但对于我来说,我无法弄清楚如何做到这一点,除了递归遍历数组中的每个项目并检查值。 如果有办法做到这一点,我希望有人可以提供帮助。 这是一个例子

class Item {
    public $item;
    public $test;
    public function __construct($item) {
        $this->item = $item;
        $this->test = sprintf("%d - Hello", $item);
    }
}

$array = [];
for($i=0; $i < 100; $i++) {
    $array[] = new Item($i);
}

$foundItem = array_search(75, array_column($array, "item"));
echo print_r($foundItem, true);

我希望 $foundItem 成为返回的整个对象。 提前致谢。

【问题讨论】:

标签: php arrays class search


【解决方案1】:

array_search 返回数组中项的键。由于您仍然拥有完整的数组,因此您可以使用它通过简单的更改来访问整个对象:

$foundItem = $array[array_search(75, array_column($array, "item"))];

参见https://3v4l.org/6k6nE(请注意,这需要 PHP 7+,因为在此之前array_column 不适用于对象数组)

您还可以使用其他一些方法(尽管您说您希望避免手动循环对象)。 array_column 支持使用第三个参数按给定列重新索引数组,因此无需使用 array_search

$array = array_column($array, null, 'item');
$foundItem = $array[75];

【讨论】:

  • 刚刚在 php fiddle 上测试过它,它工作正常。但是,刚刚在服务器上进行了测试,并不能像只有 5.3 那样工作。你还有其他建议吗?谢谢
  • 嗯,我的第一个想法是尝试升级服务器,但如果这不是一个选项,那么有办法将array_column 支持添加到早期版本,like this polyfill
猜你喜欢
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 2018-08-14
  • 2022-07-08
  • 2014-10-27
相关资源
最近更新 更多