在数组中搜索对象的成员变量

时间:2012-01-17 07:15:47

标签: php arrays search object

这样的事情怎么可能:

我有一个名为Player的对象:

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

我有一系列这些玩家:$ array。

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

我想在$ array中搜索名为“Bob”的玩家。

在不知道数组键的情况下,如何在$ array中搜索名为“Bob”的Player,以便它返回键#?例如,它应该返回4

array_search()会在这种情况下运作吗?它将如何格式化?

2 个答案:

答案 0 :(得分:3)

使用array_filter将返回一个只包含匹配键的新数组。

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

答案 1 :(得分: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'));