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. コミュニティのデータ構造を貼り付けるときは、print_rではなくvar_exportを使用することを忘れないでください

あなたはそのような些細な機能を作ることができます:

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);、falseが見つかった場合に配列のインデックスが返されます。

于 2012-05-17T07:46:27.590 に答える