1

如果我的数组看起来像:

数组([ date _type] => 日期 [ date _text] => 20/12/2012 [ place _type] => Place [ place _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++)
{

}

有人可以帮助我吗?

4

2 回答 2

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当你除以时给出余ab

$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
于 2012-11-12T10:37:35.200 回答
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()这样的函数替换(它也支持long_key_text,使用strrpos()):

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>';
}
于 2012-11-12T10:36:26.587 回答