我有以下方法:
protected function find($obj, $path){
for($i = 0, $path = preg_split('/[\[\]\.]/', $path), $len = count($path); $i < $len; $i++){
if($path[$i]){
$item = ctype_digit($path[$i]) ? (int)$path[$i] : $path[$i];
if(is_object($obj)){
$obj = $obj->$item;
}else{
$obj = $obj[$item];
}
}
}
return $obj;
}
我能够将一个对象和一个字符串传递给它,它通常会找到它。我遇到过一个不起作用的案例。
$data->name = [
[
'first' => 'Fred',
'last' => 'Hanks'
],
[
'first' => 'Tim',
'last' => 'Duncan'
]
];
$obj->find($data, 'name[0].first');
$obj->find($data, 'name[1].first');
执行此操作时,由于某种原因,第一个查找不起作用,但第二个查找不起作用。
第一个find()
给了我这个错误:
未定义的索引:第一个
但第二个find()
给了我Tim
。为什么第二个找到工作而第一个失败?