在foreach和ifset中的echo数组,但每个值仅显示一个数据

时间:2018-07-17 17:20:48

标签: php arrays if-statement foreach

所以我有这个数组列表(出于隐私目的更改了值);

$datalist  = array(
1 => 
array(
     "12.2.2.2",
     "Netherlands 1",
     "Hub 1",
     "Password",
     "Mfalse"
) ,
array(
    "12.2.2.2",
    "Singapore 1",
    "Hub 2",
    "Password 2",
    "Mfalse"
) 

我想要数组2的输出,即'Hub'和'Hub 2'。所以我做了这个php代码,因为我希望将其循环到表中,以便所有详细信息都可以表并组织起来。但是我现在唯一需要的是显示HUB。

                foreach ($response->monitors as $monitors) {
                    if(isset($monitors->id)){
                      echo
                      '<tr>
                      <td><i class="fas fa-globe"></i> '.$monitors->friendly_name.'</td>';
                           foreach ($datalist as $key => $value) {
                            # code...
                            if (isset($key)) {
                               echo '<td>'.$value[2].'</td>';
                            }
                        }
                      echo '<td>'.$monitors->url.'</td>
                      <td>'.$monitors->status.'</td>
                      </tr>';
                    }
                  }

因为我还使用其他值输出,并且我想要的数组也在表的另一个foreach循环内。

所以主要问题就在于这部分,因为每当我使用它时,它在表的每个循环上都将这样输出

foreach ($datalist as $key => $value) {
                        # code...
                        if (isset($key)) {
                           echo '<td>'.$value[2].'</td>';
                        }
                    }

输出:

Netherlands 1 Hub 1 Hub 2 12.2.2.2 
Singapore   1 Hub 1 Hub 2 12.2.2.2 

但是我想要的输出是;

Netherlands 1 Hub 1 12.2.2.2 
Singapore   1 Hub 2 12.2.2.2 

我的foreach数组语句中可能有什么问题?

$ datalist的var_dump

array (
1 => 
array (
 0 => 'x',
 1 => 'Netherlands 1',
 2 => 'PeenoiseSync',
 3 => 'x',
 4 => 'Mfalse',
),
2 => 
array (
 0 => 'x',
 1 => 'Singapore 1',
 2 => 'PeenoiseSync',
 3 => 'x',
 4 => 'Mfalse',
),
3 => 
array (
 0 => 'x',
 1 => 'Singapore 2',
 2 => 'PeenoiseSync',
 3 => 'x',
 4 => 'Mfalse',
),
 4 => 
 array (
  0 => 'x',
  1 => 'Singapore 3',
  2 => 'PeenoiseSync',
  3 => 'x',
  4 => 'Mfalse',
 ),
 5 => 
 array (
  0 => 'x',
  1 => 'Singapore 4',
  2 => 'PeenoiseSync',
  3 => 'x',
  4 => 'Mfalse',
 ),
 6 => 
 array (
  0 => 'x',
  1 => 'Singapore 5',
  2 => 'PeenoiseSync',
  3 => 'x',
  4 => 'Mfalse',
 ),
 7 => 
 array (
  0 => 'x',
  1 => 'Singapore 6',
  2 => 'PeenoiseSync',
  3 => 'x',
  4 => 'Mfalse',
 ),
 8 => 
 array (
  0 => 'x',
  1 => 'Singapore 7',
  2 => 'YTAC',
  3 => 'x',
  4 => 'Mfalse',
 ),
)

再次更新:所需的输出应与此类似; Desired output

我得到的输出; Output i'm getting

3 个答案:

答案 0 :(得分:2)

此答案假设您的mapFold数组与$datalist数组具有相同的顺序,并且包含相同数量的元素。您只需要跟踪正在使用的监视器,然后使用相同的索引来访问相应的$monitors行。您可以通过设置$datalist然后使用as $index=>$monitors

来完成此操作
$datalist[$index][2]

答案 1 :(得分:0)

您在密码2后错过了一个“”

$datalist  = array(
1 => 
array(
     "12.2.2.2",
     "Netherlands 1",
     "Hub 1",
     "Password",
     "Mfalse"
) ,
array(
    "12.2.2.2",
    "Singapore 1",
    "Hub 2",
    "Password 2",
    "Mfalse"
)
);

foreach ($datalist as $key => $value) {
                        # code...
                        if (isset($key)) {
                           echo '<td>'.$value[2].'</td>';
                        }
                    }

在这里测试

http://phpfiddle.org

答案 2 :(得分:0)

您将需要一个变量,以将$ monitors与$ value [1]进行比较,因为每次$ monitors迭代都将输出$ datalist中的所有数组信息,因此,我留下一个示例来说明如何解决此问题,但是在为了进一步帮助您,我将需要知道$ monitors-> friendly_name确切输出的内容以及$ monitors变量中的内容(也许有些事情我们可以用来比较和匹配与正确监视器对应的$ datalist数组:

foreach ($datalist as $key => $value) {
    # code...
    if ($monitors->friendly_name == $value[1]) {
        echo '<td>'.$value[2].'</td>';
    }

假定始终设置$ key(我不认为foreach不会在迭代中设置$ key),这将输出与该特定监视器的正确数组值匹配的值