PHP DataStructures按属性查找对象

问题描述

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"));
?>

解决方法

这就是我在@MarkusAO的帮助下解决此问题的方式,首先这是对OP的错误使用,因为@MarkusAO声明使用vector作为存储设备... 这是示例:

std::map<int,A> m; m.insert(std::make_pair(0,A(7))); m.insert(std::make_pair(1,A(3))); m.insert(std::make_pair(2,A(1)));  std::vector<A> vec;

std::cout << "Transform" << std::endl;

vec.reserve(m.size());
std::transform(m.begin(),m.end(),std::back_inserter(vec),// changed the key type and return type.
     [](const std::pair<const int,A> & p)->const A& { return p.second; }); 

std::cout << "for_each" << std::endl;
vec.resize(0);
vec.reserve(m.size());
std::for_each(m.begin(),// changed the key type.
    [&vec](const std::pair<const int,A> & p) { vec.push_back(p.second); });

std::cout << "START\n";
vec.resize(0);
vec.reserve(m.size());

for (const auto & p : m) {
    vec.emplace_back(p.second);
}