【问题标题】:How to search and retrieve values from multidimensional array?如何从多维数组中搜索和检索值?
【发布时间】:2017-08-24 12:31:23
【问题描述】:
$array = [
            [
            "UF" => "Goias",
                    [
                    "Nome" => [
                            "Avenor",
                            "KENNEDY",
                            "JOSE"
                            ],
                    "Fone" => [
                            "+55 (91) 1111-1111",
                            "+55 (33) 2222-2222",
                            "+55 (93) 3333-3333"
                            ],
                    "Email" => [
                            "avenor@example.com",
                            "kennedy@example.com",
                            "sabino@example.com"
                            ]
                    ]
            ],
            [
            "UF" => "Amazonas",
                    [
                    "Nome" => [
                            "Kelsen",
                            "Joao",
                            "Kenia"
                            ],
                    "Fone" => [
                            "+55 (91) 4444-4444",
                            "+55 (33) 5555-5555",
                            "+55 (93) 6666-6666"
                            ],
                    "Email" => [
                            "kelsen@example.com",
                            "joao@example.com",
                            "kenia@example.com"
                            ]
                    ]
            ]
    ];

我想通过搜索这个数组来创建一个列表并填充列表项。 例如:当用户选择“Goias”时,我必须通过数组搜索“Goias”并返回一个包含“Nome”、“Fone”和“Email”的列表,但我找不到循环这个数组并返回正确的方法价值观。

$selected = isset($_POST['selected']) ? $_POST['selected'] : 'nothing';
$key = array_search($selected,array_column($array, 'UF'));

foreach ($array[$key] as $data){

        echo '<li><p>Nome: '.$data["Nome"].'</p><p>Fone: '.$data["Fone"].'</p><p>E-mail: '.$data["Email"].'</p></li>';
};

编辑:

我尝试过这样做:

 echo
         '<div class="representante-wrapper">
            <h3>'.$selected.'</h3>';
            foreach ($array[$key] as $data){
                    foreach($data as $value){
                    echo '<ul class="flex" id="dados" style="opacity: 1;">';
                    var_dump($value);
                            foreach($value["Nome"] as $nome){
                                    echo '<li><p>Nome: '.$nome.'</p></li>';
                            }
                            foreach($value["Fone"] as $fone){
                                    echo '<li><p>Fone: '.$fone.'</p></li>';
                            }
                            foreach($value["Email"] as $email){
                                    echo '<li><p>E-mail: '.$email.'</p></li>';
                            }
                    echo '</ul>';
                    }
            };
     echo '</div>';

但结果不是我所期望的

Nome: Kelsen

Nome: Joao

Nome: Kenia

Fone: +55 (91) 4444-4444

Fone: +55 (33) 5555-5555

Fone: +55 (93) 6666-6666

E-mail: kelsen@example.com

E-mail: joao@example.com

E-mail: kenia@example.com

我想要如下,列表中的每个数组:

Nome: Kelsen
Fone: +55 (91) 4444-4444
E-mail: kelsen@example.com


Nome: Joao
Fone: +55 (33) 5555-5555
E-mail: joao@example.com

Nome: Kenia
Fone: +55 (93) 6666-6666
E-mail: kenia@example.com

【问题讨论】:

    标签: arrays search multidimensional-array


    【解决方案1】:

    您可以尝试按键和值进行搜索,例如:

    foreach ($array as $key => $value) {
        // $key is "Goias"
        // $value is an array with "nome", "fone" and "Email" keys
    }
    

    【讨论】:

      【解决方案2】:
      $array = array("UF" => array("Goias"=> array("Nome" =>   array("Avenor","KENNEDY","JOSE"),
                      "Fone" => array("+55 (91) 1111-1111","+55 (33) 2222-2222","+55 (93) 3333-3333"),
                      "Email" => array("avenor@example.com","kennedy@example.com","sabino@example.com")
                      )
              ),
              array(
              "UF" => array("Amazonas"=>
                      array(
                      "Nome" => array(
                              "Kelsen",
                              "Joao",
                              "Kenia"
                              ),
                      "Fone" => array(
                              "+55 (91) 4444-4444",
                              "+55 (33) 5555-5555",
                              "+55 (93) 6666-6666"
                              ),
                      "Email" => array(
                              "kelsen@example.com",
                              "joao@example.com",
                              "kenia@example.com"
                              )
                      )
              )
      ));
      $selected = isset($_POST['selected']) ? $_POST['selected'] : 'nothing';
      $i=0;
         foreach($array as $key => $val){
          if(isset($array[$i]['UF'][$selected])){
             break;
           }
         $i++;
        }
      foreach ($array[$i]['UF'] as $data){
      $li = '<li>';
      foreach($data["Nome"] as $nome){
      $li .= '<p>Nome:'.$nome.'</p>';
      }
       foreach($data["Fone"] as $nome){
      $li .= '<p>Fone:'.$nome.'</p>';
      }
       foreach($data["Email"] as $nome){
      $li .= '<p>E-mail:'.$nome.'</p>';
      }
              $li .= '</li>';
      echo $li;
      };
      

      【讨论】:

      • 不起作用,php返回:“未定义索引:Nome”; "为 foreach() 提供的参数无效"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多