【问题标题】:Filter specific values in an array过滤数组中的特定值
【发布时间】:2013-09-02 18:34:13
【问题描述】:

我想在一个页面上展示一些特定的团队信息(日程/结果/排名)。每个团队都有自己的页面,每个页面都包含一个 team_id 变量。

根据这个$team_id,我想通过过滤一个包含所有团队信息的数组来设置其他一些变量的值。

例如:

Array ( 
[0] => Array ( [CompName] => Foo [ClassName] => 2e [Class] => 12 [Type] => R [Teamid] => 88107 [Team] => 1 ) 
[1] => Array ( [CompName] => Foo1 [ClassName] => 4e [Class] => 14 [Type] => R [Teamid] => 88114 [Team] => 1 ) 
[2] => Array ( [CompName] => Foo2 [ClassName] => 123 [Class] => 35 [Type] => B [Teamid] => 12348 [Team] => 3 ) 

)

然后我想将变量 $teamClass 设置为 [ClassName] 的值,其中 [Team] == $team_id 和 [Type] === 'R'。

我可以为此使用 PHP 的 array_filter() 还是有其他更好的方法?

【问题讨论】:

    标签: php filter array-filter


    【解决方案1】:

    假设您的团队 ID 是唯一的,我建议您首先使用团队的 ID 号作为主数组的索引。然后对于团队页面,您以某种方式确定团队 id 值(如来自 GET 或 POST)。然后,每个团队的其余代码都是相同的。这样做的好处是您可以为所有团队页面使用一个 php 文件。这是一个基本的设置。需要添加一些检查和 html 格式等。

    $teamID = $_GET['teamid'];
    
    echo "Team ID: ".$teamID."\n";
    
    $team = $team_array[$teamID]; // To make the remaining code more concise
    
    echo "Team Name: ".$team['team_name']."\n";
    echo "Class Name: ".$team['ClassName']."\n";
    echo "Type: ".$team['Type']."\n";
    

    等等。

    另一种可能性是使用 for/foreach 循环的组合在数组中搜索特定团队 ID。这将为您提供特定团队信息所在的主数组的索引。

    $teamID = $_GET['teamid'];
    $team = array();
    for ($t = 0; $t < count($main_array); $t++) {
      if ($main_array[$t]['TeamID'] == $teamID) {
        $team = $main_array[$t];
        break;
      }
    }
    
    if (count($team) > 0) {
      // Do your team display stuff here
    }
    

    【讨论】:

    • 主数组来自 API,并采用我的问题中描述的格式。我无法更改此设置。
    • 嗯,没有什么可以阻止您将数组操作成您想要的形式,只要数组不是太大。我的意思是从你从 API 获得的数组中构建你自己的数组。但我会考虑不同的解决方案。
    • 我添加了一个循环示例。这是基本的,但它应该给你一个基础。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2022-07-12
    • 2021-12-08
    相关资源
    最近更新 更多