2017-08-21 143 views
-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) 
); 

我如何转换这使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); 

任何想法?由于

+4

'foreach'太花哨......? – deceze

+1

在之前_“当然没有我知道的foreach,但我的实际情况更复杂”_。 – CodeCaster

+0

这里不需要反对票。 OP陈述了问题并尝试了代码。标题虽然有点误导。 – Progrock

回答

1

只是foreach循环应该这样做:

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

由于某种原因,我不认为使用foreach。我觉得我太过于复杂。 – Tom

0

下面是代码,

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

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

+0

这与[第一个答案](https://stackoverflow.com/a/45797704/3316645)完全相同。 – domsson

+0

正确!但在发布答案之前我会知道,我从未发布过。 – rahulsm

0

的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 
+0

与其他三个答案完全一样。 – domsson

+0

如果你看时间,它也是一样,更新答案:) –

+1

奇怪的html断裂元素,你已经到了那里。我在你的输出中看不到'
'。 – Progrock

0

这很简单,使用foreach。这种控制结构精密制造,反覆数组:

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

我们现在已经有四次这样的答案。 ;) – domsson

+1

@domsson我们需要一个foreach来解答这个问题。 –

+0

@domsson你确实是错的,在我写这篇文章的时候,答案是6次,而不是4次。这是当人们被允许在同一页面上同时书写时发生的事情。 ;)编辑:通过查看其他答案,似乎你不反对重复您的意见。 – ksjohn

1
<?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 
0

只是遍历你的数组:

$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; 

认为它会做的工作。

+1

想一想?你试过了吗?不,如果你确实遇到了语法错误。 – Progrock

+1

加一个最钝的答案。 – Progrock

+0

没有尝试...但是,除了语法错误,算法是正确的...是的,第二个循环后面的行是不正确的 –

0

就我个人而言,我会用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"; 
}