【问题标题】:PHP Convert Array To StringPHP 将数组转换为字符串
【发布时间】:2018-01-29 13:23:29
【问题描述】:

这是我的数组:

$info = array( 
    "setA" => array ( "start" => 0, "end" => 0 ),
    "setB" => array ( "start" => 100, "end" => 300 ),
    "setC" => array ( "start" => 0, "end" => 0 ),
    "setD" => array ( "start" => 500, "end" => 1000 ),
    "setE" => array ( "start" => 0, "end" => 0 ),
    "setF" => array ( "start" => 0, "end" => 0 ),
    "setG" => array ( "start" => 0, "end" => 0 )
);

如何将其转换为 echo 命令生成:

setA 0 - 0
setB 100 - 300
setC 0 - 0
setD 500 - 1000
setE 0 - 0
setF 0 - 0
setG 0 - 0

我尝试了各种方法,包括以下内容,但都没有成功。

array_walk_recursive($info, function($v) use (&$result) {
                    $result[] = $v;
                });
                echo implode('<br>', $result);

有什么想法吗?谢谢

【问题讨论】:

  • foreach 太花哨了……?
  • 在之前“我当然不知道foreach,但我的实际场景更复杂”
  • @Progrock 答案是显而易见的(只要您了解 PHP 最基本的控制结构)并且有很多问题几乎是重复的,例如 this onethat one。所以虽然我不是说这应该被否决,但我认为投反对票也没有错。
  • 如果您是 Php 和数组的新手,那么手册(array 和 book.array)并没有明确说明 foreach 是 PHP 循环遍历数组结构的事实通用方法。
  • 恕我直言,但如果您还没有遇到foreach,您需要学习某种 PHP 介绍,不要问 SO。

标签: php arrays


【解决方案1】:

我个人会使用 foreach 遍历数组,但您的 array_walk 示例几乎已经完成(使用 array_walk 而不是 array_walk_recursive)。

<?php
$result = [];
array_walk($info, function($v, $k) use (&$result) {
    $result[] = $k . ' ' . $v['start'] . ' - ' . $v['end'];
});
echo implode('<br>', $result);

输出:

setA 0 - 0<br>setB 100 - 300<br>setC 0 - 0<br>setD 500 - 1000<br>setE 0 - 0<br>setF 0 - 0<br>setG 0 - 0

您可以跳过构建数组,然后通过在 array_walk 回调中回显来内爆。

<?php
array_walk($info, function($v, $k) {
    echo $k . ' ' . $v['start'] . ' - ' . $v['end'] . "\n";
});

但正如您所见,foreach 更加简单。

foreach($info as $k => $v) {
    echo $k . ' ' . $v['start'] . ' - ' . $v['end'] . "\n";
}

【讨论】:

    【解决方案2】:

    foreach 会更容易使用

    $info = array( 
        "setA" => array ( "start" => 0, "end" => 0 ),
        "setB" => array ( "start" => 100, "end" => 300 ),
        "setC" => array ( "start" => 0, "end" => 0 ),
        "setD" => array ( "start" => 500, "end" => 1000 ),
        "setE" => array ( "start" => 0, "end" => 0 ),
        "setF" => array ( "start" => 0, "end" => 0 ),
        "setG" => array ( "start" => 0, "end" => 0 )
    );
    
    foreach ($info as $key => $value) {
        echo $key.' '.$value['start'].' - '.$value['end'].'</br>';
    }
    

    输出:

    setA 0 - 0
    setB 100 - 300
    setC 0 - 0
    setD 500 - 1000
    setE 0 - 0
    setF 0 - 0
    setG 0 - 0
    

    【讨论】:

    • 和其他三个答案完全一样。
    • 如果你看时间,也是一样的,更新答案:)
    • 奇怪的 html 破坏元素你在那里。而且我在您的输出中没有看到&lt;/br&gt;s。
    【解决方案3】:

    只需循环遍历您的数组:

    $result = "";
    foreach($info as $key => $content){
        $result .= $key . " ";
        foreach($content as $bounce => $value){
            $result .= $value . "-";
        }
        $result = substr($result, 0, strlen($result) - 1) . "<br />\n;
    }
    echo $result;
    

    认为它会完成这项工作。

    【讨论】:

    • 想什么呢?你试过了吗?不,如果你这样做了,你会偶然发现语法错误。
    • 加一个以获得最迟钝的答案。
    • 没试过……但是,除了语法错误,算法是正确的……是的,第二个循环之后的行不正确
    【解决方案4】:
    <?php
    $info = array( 
        "setA" => array ( "start" => 0, "end" => 0 ),
        "setB" => array ( "start" => 100, "end" => 300 ),
        "setC" => array ( "start" => 0, "end" => 0 ),
        "setD" => array ( "start" => 500, "end" => 1000 ),
        "setE" => array ( "start" => 0, "end" => 0 ),
        "setF" => array ( "start" => 0, "end" => 0 ),
        "setG" => array ( "start" => 0, "end" => 0 )
    );
    
    foreach($info as $key => $value) {
        printf("%s %d - %d\n", $key, $value['start'], $value['end']);
    }
    

    输出:

    setA 0 - 0
    setB 100 - 300
    setC 0 - 0
    setD 500 - 1000
    setE 0 - 0
    setF 0 - 0
    setG 0 - 0
    

    【讨论】:

      【解决方案5】:

      这很简单,使用foreach。这个控制结构精确地用于迭代数组:

      foreach ($info as $key => $val) {
          echo $key, ' ', $val['start'], ' - ', $val['end'], '<br>';
      }
      

      【讨论】:

      • @domsson 我们需要一个 foreach 来回答这个问题。
      • @domsson 你确实错了,在我写这篇文章的时候,答案出现了 6 次,而不是 4 次。当人们被允许在同一页上写字时,就会发生这种情况同时。 ;) 编辑:通过查看其他答案,您的 cmets 似乎并不反对重复。
      • 哦,来吧@ksjohn 使用逗号作为多个回显参数,而不是连接字符串。完全不同!
      • . 是连接运算符,而, 是参数分隔运算符。 echo 可以接受多个参数。您可以将所有部分连接到一个字符串中,将它们中的每一个作为不同的参数传递,或者两者都传递。由于两种方式等效的情况下最显着的区别是连接比多个参数更贪婪,因此我倾向于不连接。
      【解决方案6】:

      这是代码,

      foreach($info as $key => $value){
          echo $key." ". $value['start']." - ".$value['end'];
      }
      

      其简单的 foreach 循环遍历您的数组。

      【讨论】:

      • 这和first answer完全一样。
      • 正确!但我会在发布答案之前知道,我永远不会发布。
      【解决方案7】:

      只需一个foreach 循环即可:

      foreach ($info as $set => $range) {
          echo $set . ' ' . $range['start'] . ' - ' . $range['end'] . '<br />';
      }
      

      【讨论】:

      • 谢谢,出于某种原因,我没想过使用 foreach。我想我过于复杂了。
      猜你喜欢
      • 2013-08-12
      • 2021-12-27
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 2013-05-12
      • 2013-04-27
      • 2016-04-28
      相关资源
      最近更新 更多