【问题标题】:Searching an array for an object's member variable在数组中搜索对象的成员变量
【发布时间】:2012-02-12 00:54:55
【问题描述】:

这样的事情怎么可能发生:

我有一个名为 Player 的对象:

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

我在 $array 中有一组这些玩家。

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

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

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

array_search() 在这种情况下可以工作吗?它将如何格式化?

【问题讨论】:

    标签: php arrays search object


    【解决方案1】:

    使用 array_filter 将返回一个新数组,其中只有匹配的键。

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

    【讨论】:

    • 如果 OP 使用 PHP5.3 就是这样!
    • @Juicy 对于不幸的人,create_function() 总是在那里。
    【解决方案2】:

    根据 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'));    
    

    【讨论】:

    • 它不会,因为 OP 明确指出数组是对象数组而不是标量...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多