4

希望我说得对...

我怎样才能找到 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
        )
)
4

2 回答 2

4
  1. 制作一个迭代数组的简单函数

  2. 封装它而不是让它挂起

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

你可以做这样一个微不足道的功能:

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',
))
于 2012-05-17T07:45:25.247 回答
0
function findIndexById($id, $array) {
    foreach($array as $key => $value) {
        if($value->ID == $id) {
            return $key;
        }
    }
    return false;
}

你可以像这样搜索它findIndexById(68, $array);,如果它发现其他错误,它将返回数组的索引。

于 2012-05-17T07:46:27.590 回答