如果我的数组看起来像:
数组([日期 _type] =>日期[日期 _text] => 20/12/2012 [地方 _type] =>放置[地方 _text] => NY)
如何打印结果如下:
<span>Date</span><div>20/12/2012</div>
<span>Place</span><div>NY</div>
so on.... (if more custom array)
我现在来到这一步
$custom_info = array (
"date_type" => "Date",
"date_text" => "20/12/2012",
"place_type"=>"Place",
"place_text" => "NY"
) ;
$count = count($custom_info)/2;
for ($i=1; $i<$count; $i++)
{
}
有人可以帮帮我吗?
答案 0 :(得分:4)
如果您的数组始终具有您编写的结构,请使用此
$i = 0;
foreach ($custom_info as $k => $v) {
if ($i % 2 == 0){
echo "<span>".$v."</span>";
} else {
echo "<div>".$v."</div>";
}
$i++;
}
测试
说明:
根据你的数组结构,你应该在span中回显第一个元素的值,在div中回显第二个元素的值,依此类推:$i % 2 == 0
表示当它是元素号0,2,4等时,以span打印,如果是1,3,5等,则以div打印。在a % b
a
时,b
会给出余数
$i = 0, $i % 2 --> 0
$i = 1, $i % 2 --> 1
$i = 2, $i % 2 --> 0
$i = 3, $i % 2 --> 1
$i = 4, $i % 2 --> 0
答案 1 :(得分:2)
使用foreach
,explode()
和ucfirst()
:
foreach( $custom_info as $k => $v){
$parts = explode( '_', $k);
if( count($parts) != 2){
throw new Exception( 'Invalid format of key: ' . $k);
}
if( $parts[1] != 'text'){
continue;
}
// Build label
$key = $parts[0] . '_type';
$label = '';
if( isset( $custom_info[ $key])){
$label = $custom_info[ $key];
} else {
$label = ucfirst( $parts[0]);
}
echo '<span>' . htmlspecialchars( $label) . '</span><div>'
. htmlspecialchars( $v) . '</div>';
}
或者你可以用这样的函数替换explode()
(使用strrpos()
也支持long_key_text
):
function getParts( $key){
$pos = strrpos( $key, '_');
if( $pos === false){
return false; // or array or so
}
return array(
substr( $key, 0, $pos),
sbustr( $key, $pos+1)
);
}
基于Elbys的评论和你的答案,最简单的方法是:
$custom_info = array (
"Date" => "20/12/2012",
"Place" => "NY"
) ;
foreach( $custom_info as $k => $v){
echo '<span>' . htmlspecialchars( $k) . '</span><div>'
. htmlspecialchars( $v) . '</div>';
}