【问题标题】:Get keys from multidimensional array according to other keys根据其他键从多维数组中获取键
【发布时间】:2014-02-25 12:21:44
【问题描述】:

我有一个像这样的多维数组,它是从 JSON 转换而来的:

Array (

    [1] => Array (
        [name] => Test
        [id]   => [1]
    )

    [2] => Array (
        [name] => Hello
        [id]   => [2]
    )
)

如果name 等于用户提供的值,我如何返回id 的值? (例如,如果用户输入“Test”,我希望它返回“1”)

编辑:如果有人想要,下面是可以使用的代码:

$array = json_decode(file_get_contents("json.json"), true);
foreach($array as $item) {
    if($item["name"] == "Test")
        echo $item["id"];
}

【问题讨论】:

  • 你试过什么?

标签: php arrays multidimensional-array key


【解决方案1】:

经典的解决方案是简单地使用foreach 遍历数组并检查每一行的name。当它与您的搜索词匹配时,您已经找到了您正在寻找的 id,因此 break 停止搜索并使用该值执行某些操作。

如果您使用的是 PHP 5.5,一个适用于较小数据集的便捷解决方案是使用array_column

$indexed = array_column($data, 'id', 'name');
echo $indexed['Test']; // 1

【讨论】:

    【解决方案2】:

    你可以使用这个功能

    function searchObject($value,$index,$array) {
        foreach ($array as $key => $val) {
           if ($val[$index] === $value)
                return $val;
        }
        return null;
    }
    
    $MyObject= searchObject("Hello","name",$MyArray);
    $id = $MyObject["id"];
    

    【讨论】:

      【解决方案3】:

      您可以像在某些功能中那样手动操作:

         function find($items, $something){
             foreach($items as $item)
             {
                if ($item["name"] === $something)
                   return $item["id"];
             }
             return false;
          }
      

      【讨论】:

        【解决方案4】:

        解决办法

        $count = count($array);
        $name = $_POST['name']; //the name which user provided
        for($i=1;$i<=$count;$i++)
        {
          if($array[$i]['name']==$name)
          {
           echo $i;
           break;
          }
        }
        

        享受

        【讨论】:

        • 使用for 而不是foreach 几乎总是一个坏主意。在这种情况下,它会使代码变得不必要地脆弱:如果输入发生轻微变化,它将停止工作(或者更糟糕的是,一直正常工作)。
        • 是的,你是对的 .. 但我喜欢给提问者容易理解的答案... @Jon
        • @NishantSolanki 好吧,我从来不理解 for 循环:P 输出:Unexpected $end on line 14
        • @Will ..你的数组结构有问题...[id]=&gt;[2] ...该值不应该在square brackets..它应该在commas..
        • @NishantSolanki:我不明白forforeach 更容易理解。手册本身说 foreach 构造提供了一种迭代数组的简单方法。”
        【解决方案5】:

        试试这个:

        $name = "Test";
        
        foreach($your_array as $arr){
          if($arr['name'] == $name){
             echo $arr['id'];
          }
        }  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-12
          • 1970-01-01
          • 2017-10-11
          • 1970-01-01
          • 2022-07-07
          • 2020-06-11
          • 1970-01-01
          相关资源
          最近更新 更多