PHP元素输出显示array()而不是字符串

时间:2018-07-18 12:55:36

标签: php arrays

我目前正在通过sql查询构建数组

$displayResult = $mysqlConn->query($getDisplays);

$displayNames = array();
foreach($displayResult as $subArray) {
  if(!array_key_exists($subArray['location_name'], $displayNames)) {
    $displayNames[$subArray['location_name']] = array();
  }
    $displayNames[$subArray['location_name']][] = $subArray['display_name'];
}

print_r($displayNames);

它的打印方式如下:

Array
(
[Office 1] => Array
    (
        [0] => lobby
        [1] => break room
    )

[Office 2] => Array
    (
        [0] => lobby
        [1] => break room
    )

但是由于某种原因,当我循环并尝试将数组键作为标题回显,将子项作为链接时,它只会转储单词“ array”

<?php foreach($displayNames as $key => $displayName):?>
<h2><?php echo $key; ?></h2>
<a><h4><?php echo $displayName; ?></h4></a>
<?php endforeach;?>

我尝试按索引转储,但它为空。我需要另一个嵌套的foreach来生每个孩子吗?

4 个答案:

答案 0 :(得分:1)

您有多维/嵌套数组,因此$ displayName实际上也是数组,您尝试将其打印为字符串。只需使用其索引来调用其子级即可。 最简单的解决方案是:

<?php foreach($displayNames as $key => $displayName):?>
<h2><?php echo $key; ?></h2>
<a><h4><?php echo $displayName[0] . '-' . $displayName[1]; ?></h4></a>
<?php endforeach;?>

对于多个元素,您可以使用for循环或foreach

  <?php foreach($displayNames as $key => $displayName):?>
    <h2><?php echo $key; ?></h2>
      <?php foreach($displayName as $key2 => $displayNameRoom): ?> 
       <a><h4><?php echo $displayNameRoom; ?></h4></a>
      <?php endforeach;  ?>      
    <?php endforeach;?>

答案 1 :(得分:1)

您的数组如下所示:

Array
(
  [Office 1] => Array
  (
    [0] => lobby
    [1] => break room
  )

  [Office 2] => Array
  (
    [0] => lobby
    [1] => break room
  )

所以在您的foreach循环中,当您这样做时:

<?php foreach($displayNames as $key => $displayName):?>
  <h2><?php echo $key; ?></h2>
  <a><h4><?php echo $displayName; ?></h4></a>
<?php endforeach;?>

$displayName是一个数组。

要获取“大厅”或“休息室”的值,您应该对“大厅”执行$displayName[0],对于“休息室”进行$displayName[1]

编辑:

如果将来您有两个以上的值,则有两个解决方案:

foreach ($displayName as $value) {
    echo $value; // you will get "lobby", then "break room", then the other value
}

$i = 0;
do {
    echo $displayName[$i];
    $i++;
} while (isset($displayName[$i]));

结果与以前相同,只是在有值的情况下回显每个值!

希望有帮助

答案 2 :(得分:0)

您需要的确切输出。

基本上,您的$displayName包含一个数组lobbybreak room

<?php foreach ($displayNames as $location): ?>
    <?php foreach ($location as $displayKey => $displayName): ?>
        <h2><?= $displayKey ?></h2>
        <a><h4><?= $displayName ?></h4></a>
    <?php endforeach; ?>
<?php endforeach; ?>

答案 3 :(得分:-1)

只需:

<?php foreach($displayNames as $key => $displayName):?>
<h2><?php echo $displayNames[$key]; ?></h2>
<a><h4><?php echo $displayName; ?></h4></a>
<?php endforeach;?>