2

我在 PHP 中有一个数组,这是一个片段:

$locations = array(
    array(
        "id" => 202,
        "name" => "GXP Club - Fable"
    ),

    array (
        "id" => 204,
        "name" => "GXP Club - Gray"
    )
);

我所知道的(来自 GET)是 ID(202)。我想显示的是“显示结果” ( where $locations[?][id] = $_GET['id'] { echo $locations[?][name] } ) ——如果你能原谅我使用伪代码的话。

不确定哪个函数最好,或者我是否需要遍历整个数组才能找到它。谢谢。

编辑:进一步澄清。我需要学习给定 [id] 的 [name]

4

4 回答 4

3
foreach( $locations as $arr ) {
    if($arr['id'] == $_GET['id']) {
        echo $arr['name'];
        break;
    }
}

这应该够了吧。

于 2012-08-29T16:40:17.397 回答
0

虽然遍历数组是上述问题的解决方案,但如果这是数组中的所有数据,将数组更改为$id=>$name键值对而不是命名键值似乎更理想,例如:

$locations = array( '202' => 'GXP Club - Fable',
                    '204' => 'GXP Club - Gray',
             )

或者,如果有更多数据,我会切换到嵌套数据结构,例如:

$locations = array( '202' => array( 'name' => 'GXP Club - Fable', 'prop2' =>$prop2, etc),      
                    '204' => array( 'name' => 'GXP Club - Gray', 'prop2' =>$prop2, etc),
             )

这使得您可以通过 ID(例如$locations[$id]['name'])访问数据,这似乎是您通常想要做的事情。

于 2012-08-29T16:42:16.307 回答
0

您可以使用array_map将自定义操作应用于给定数组中的每个元素的函数。

array_map(
    function($arr) { if ($arr['id'] == $_GET['id']) echo $arr['name']; }, 
    $locations
);
于 2012-08-29T16:53:43.270 回答
0

使用 PHP 的内置数组函数*避免foreach循环:

<?php
$locations = [["id"=>202, "name"=>"GXP Club - Fable"], ["id"=>204, "name"=>"GXP Club - Gray"]];

$col = array_search(array_column($locations, "id"), $_GET["id"]);
echo $locations[$col]["name"];

或者,使用不同的方法:

<?php
$locations = [["id"=>202, "name"=>"GXP Club - Fable"], ["id"=>204, "name"=>"GXP Club - Gray"]];

$result = array_filter($locations, function($v){ return $v["id"] == $_GET["id"]; });
echo array_shift($result)["name"];

* 值得注意的是,array_column()直到 PHP 5.5 才可用,在提出这个问题 10 个月后发布!

于 2019-11-20T17:10:49.943 回答