如何找到键是特定值的对象的索引?

时间:2012-05-17 07:41:48

标签: php wordpress

希望我说得对...

我怎样才能找到ID = 68的索引?

我需要帮助创建一个能够返回索引2的函数...谢谢!

$posts = Array (
    [0] => stdClass Object
        (
            [ID] => 20
            [post_author] => 1
            [post_content] => 
            [post_title] => Carol Anshaw
        )

    [1] => stdClass Object
        (
            [ID] => 21
            [post_author] => 1
            [post_content] => 
            [post_title] => Marie Arana
        )

    [2] => stdClass Object
        (
            [ID] => 68
            [post_author] => 1
            [post_content] => 
            [post_title] => T.C. Boyle
        )

    [3] => stdClass Object
        (
            [ID] => 1395
            [post_author] => 1
            [post_content] => 
            [post_title] => Rosellen Brown
        )
)

2 个答案:

答案 0 :(得分:4)

  1. 制作一个简单的函数,遍历数组

  2. 封装而不是让它挂起

  3. 在粘贴社区的数据结构时,请记住使用var_export 而不是print_r

  4. 你可以做出如此微不足道的功能:

    function getKeyForId($id, $haystack) {
        foreach($haystack as $key => $value) {
            if ($value->ID == $id) {
                return $key;
            }
        }
    }
    
    $keyFor68 = getKeyForId(68, $posts);
    

    但是将特定功能挂起是没有意义的。你可以这样使用ArrayObject

    class Posts extends ArrayObject {
        public function getKeyForId($id) {
            foreach($this as $key => $value) {
                if ($value->ID == $id) {
                    return $key;
                }  
            }  
        }  
    }
    

    使用示例:

    $posts = new Posts();
    
    $posts[] = new StdClass();
    $posts[0]->ID = 1;
    $posts[0]->post_title = 'foo';
    
    
    $posts[] = new StdClass();
    $posts[1]->ID = 68;
    $posts[1]->post_title = 'bar';
    
    
    $posts[] = new StdClass();
    $posts[2]->ID = 123;
    $posts[2]->post_title = 'test';
    
    echo "key for post 68: ";
    echo $posts->getKeyForId(68);
    echo "\n";
    var_export($posts[$posts->getKeyForId(68)]);
    

    输出:

    key for post 68: 1
    stdClass::__set_state(array(
       'ID' => 68,
       'post_title' => 'bar',
    ))
    

答案 1 :(得分:0)

function findIndexById($id, $array) {
    foreach($array as $key => $value) {
        if($value->ID == $id) {
            return $key;
        }
    }
    return false;
}

并且您可以像findIndexById(68, $array);一样搜索它,如果它发现错误,它将返回数组的索引。