搜索在多维PHP对象

public function filter($index, $value) { if($this->tasks) { foreach ($this->tasks as $id => $t) { if($t->$index != $value) { unset($this->tasks[$id]); } } } else { echo "Tasks are empty"; } }

所以,我有上述搜索多维对象功能的问题。 我的意思是这样的:

$task->form->id $task->form->type $task->author->id $task->fields->[FIELDNAME]->value $task->form->template->id $task->id

等,这些都是需要被访问的各种领域。 我想,我可能只是在$指标,把“形式 - > ID”,但没有奏效。 对于我的申请,我从字面上可以拼出来。 我只是不希望有写每一个到最后一个功能,因为他们中的一些(因为你可以看到),只需要在第一级和一些需要一路下跌四个对象。

只要告诉我你需要什么更多的数据,我就给你。 我知道每个击键密切因此它有时意味着我忘记分享一些东西。

如果你帮助,非常感谢你。

我做了什么



好了,所以我得到它的工作,但我做了一些不同的东西。

在该Form

public function search($value, $type = NULL) { if(is_object($this->fields)) { foreach($this->fields as $page) { foreach($page as $name=>$field) { if($name != "pdata") { if ($type != NULL && $field->type == $type && $field->value == $value || $type == NULL && isset($field->value) && $field->value == $value) { return true; } } } return false; } } else { //Probably corrupted return false; } return false; }

它的外面我可以调用这个函数,并删除或基于它是否返回true或false补充。

--------------解决方案-------------

function array_searchRecursive( $needle, $haystack, $strict=false, $path=array() )
{
if( !is_array($haystack) ) {
return false;
}

foreach( $haystack as $key => $val ) {
if( is_array($val) && $subPath = array_searchRecursive($needle, $val, $strict, $path) ) {
$path = array_merge($path, array($key), $subPath);
return $path;
} elseif( (!$strict && $val == $needle) || ($strict && $val === $needle) ) {
$path[] = $key;
return $path;
}
}
return false;
}

要么

我知道你不希望这一切写出来,但我不得不说我爱这是在Symfony框架所做的那样。 在symfony中有一个定义函数可检索给定对象的每个资料片(变量)的实体类。

你可以模仿一种方法是创建任务的基类,具有功能检索每个需要变量...如getTaskId。

然后,你可以扩展你与现在的工作之一这个基类。 这将使您获得您创建解析你的对象的功能。 检索$任务 - >形式 - >模板 - > ID可以像调用getTemplateId功能一样简单。

我知道这可能会花费比你要找的时间,但我希望它能帮助。

您可以使用get_object_vars()来处理对象的所有公共变量,并继续递归地到达指定的所有变量id 。 下面是一个简单的模板:

class Task {
public $author, $form, $id;
}
class Author {
public $id;
}
class Form {
public $id, $type, $template;
}
class Template {
public $id;
}

$tasks = Array();

$task = new Task();
$tasks[] = $task;
$task->id = "id1";
$task->author = new Author();
$task->author->id = "id1";
$task->form = new Form();
$task->form->template = new Template();
$task->form->template->id = "id1";

function filter($parent, $object, $id_value) {
$vars = get_object_vars($object);
foreach ($vars as $var => $value) {
if ($var == "id") {
if ($value == $id_value) {
echo "$parent -> $var == $value <br />";
}
}
else if (is_object($value) && isset($value)) {
filter("$parent -> $var", $value, $id_value);
}
}
}

foreach ($tasks as $index => $task) {
filter("Task[$index]", $task, "id1");
}

输出为:

Task[0] -> author -> id == id1
Task[0] -> form -> template -> id == id1
Task[0] -> id == id1

分类:php 时间:2015-03-15 人气:0
本文关键词: PHP,搜索,空中接力
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.269 (s). 10 q(s)