数组索引为零时找不到值

时间:2015-08-15 15:20:01

标签: php arrays

我有以下方法:

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。为什么第二个找到工作而第一个失败?

0 个答案:

没有答案