How can I find index of an object where key is a specific value?

php, wordpress

Solution

Make a trivial function that iterates over the array

Encapsulate it instead of leaving it hanging

Remember to use var_export rather than print_r when pasting data structures for the community

You could make such a trivial function:

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

$keyFor68 = getKeyForId(68, $posts);

But it doesn't make sense to leave specific functions hanging. You could use ArrayObject as such:

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

Example usage:

$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)]);

Output:

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

Problem

Hopefully I'm saying this properly... How could I find the index of where ID = 68? I need help creating a function that would return the index of 2... Thanks! ``` $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 ) ) ```

Original source