【问题标题】:PHP element output shows array() instead of stringPHP 元素输出显示 array() 而不是字符串
【发布时间】:2018-07-18 12:55:35
【问题描述】:

我目前正在从 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
    )

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

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

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

【问题讨论】:

标签: php arrays


【解决方案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]

编辑:

如果将来你有超过 2 个值,两个解决方案:

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 个子元素,我不能循环这些元素,以便为我拥有多少个子元素而构建吗?
  • 也就是说,如果其他办公室有大堂、休息室、会议室甚至更多呢?
【解决方案2】:

您有多维/嵌套数组,因此 $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;?>

【讨论】:

  • 这正是我所需要的,所以我最初采用了正确的方法,但我发现我在索引嵌套的 foreach 时出错了。非常感谢
  • @TomN.,没有问题 :)
【解决方案3】:

您所追求的确切输出。

基本上你的$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; ?>

【讨论】:

    【解决方案4】:

    只需做:

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

    【讨论】:

    • 这只是为每个键和值打印数组
    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多