【问题标题】:PHP DataStructures find object by propertyPHP DataStructures 按属性查找对象
【发布时间】:2020-10-28 13:37:18
【问题描述】:

在 PHP 中我需要在集合(向量)中查找对象索引,如何查找具有特定属性的对象($object->name = "name: 3")? 有什么建议吗?

这是一个例子:

<?php
//simple class
class tip {
    public $ID;
    public $name;
}

$col =  new \Ds\Vector();

//create few objects in $col
for ($i=0;$i<5;$i++) {
    $o = new tip();
    $o->ID = $i;
    $o->name = "name: $i";
    $col->push($o);
}

var_dump($col);

//search should return 4 (as 4 object in vector is object with name: "name: 4" but it returns false
var_dump($col->find("name: 3"));
?>

【问题讨论】:

  • 您从哪里获得 \Ds\Vector 的代码?
  • @NigelRen 我从这里推测php.net/manual/en/class.ds-vector.php
  • 我也怀疑这个 Vector 类理解 name: 3 表示法。正如手册所说的“值将按值和类型进行比较”。因此比较字符串和对象将评估为false。
  • 你基本上可以foreach你的向量,当你找到你要找的值时,你只需要break
  • 不确定这是否适合开始使用 Vector。 OP 基本上将其用作对象存储,而不是一系列值。因此,Vector 的大多数方法似乎都无关紧要。拥有class tip extends Ds\Vector 可能更有意义。

标签: php vector data-structures find


【解决方案1】:

这就是我在@MarkusAO 的帮助下解决这个问题的方法,首先这是错误使用 OP,因为@MarkusAO 声明使用向量作为存储设备...... 这是一个例子:

$filter = $col->filter(function($value) {
    return $value->name == "name: 3";
});
//change name property of one object
if ($filter->count()==1) $filter[0]->name = "xxx";
//show filter object
var_dump($filter);
//show all objects
var_dump($col);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2014-08-04
    • 2014-02-12
    • 2013-03-16
    相关资源
    最近更新 更多