2012-01-17 99 views
1

怎麼會這樣的事情是可能的數組:搜索對象的成員變量

我叫球員的對象:

class Player 
{ 
    public $name; 
    public $lvl; 
} 

,我有這些球員在一個數組:$陣列。

例如$array[4]->name = 'Bob';

我要搜索$陣列名爲「鮑勃」的球員。

在不知道數組鍵的情況下,如何爲名爲「Bob」的播放器搜索$ array,以便返回鍵#?例如,它應該返回4

array_search()會在這種情況下工作嗎?它將如何格式化?

回答

3

使用array_filter將返回只匹配的密鑰的新陣列。

$playerName = 'bob'; 
$bobs = array_filter($players, function($player) use ($playerName) { 
    return $player->name === $playerName; 
}); 
+0

如果使用PHP5.3的OP,這是方法! – 2012-01-17 07:27:09

+0

@Juicy對於不幸的是,['create_function()'](http://php.net/manual/en/function.create-function.php)總是存在。 – kapa 2012-01-17 07:30:57

1

據PHP docs,array_search的確會工作:

$players = array(
    'Mike', 
    'Chris', 
    'Steve', 
    'Bob' 
); 

var_dump(array_search('Bob', $players)); // Outputs 3 (0-index array) 

- 編輯 -

對不起,看了帖子很快,沒看到你有對象的數組,你可以這樣做:

$playersScalar = array(
    'Mike', 
    'Chris', 
    'Steve', 
    'Bob' 
); 

class Player 
{ 
    public $name; 
    public $lvl; 
} 

foreach ($playersScalar as $playerScaler) { 

    $playerObject = new Player; 

    $playerObject->name = $playerScaler; 

    $playerObjects[] = $playerObject; 
}  

function getPlayerKey(array $players, $playerName) 
{ 
    foreach ($players as $key => $player) { 
     if ($player->name === $playerName) { 
      return $key; 
     } 
    } 
} 

var_dump(getPlayerKey($playerObjects, 'Steve'));  
+1

它不會,因爲OP明確指出,該數組是對象的數組而不是標量... – 2012-01-17 07:24:17

+0

雅讀帖子太快了,謝謝。 – 2012-01-17 07:37:29