以自定义模式打印自定义数组

时间:2012-11-12 10:32:16

标签: php arrays loops

如果我的数组看起来像:

  

数组([日期 _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++)
{

}
有人可以帮帮我吗?

2 个答案:

答案 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)

使用foreachexplode()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>';
}