PHP:多维数组中的end()函数问题

时间:2014-05-20 02:41:43

标签: php arrays multidimensional-array

我有一个来自数据库的数组:

   $new_array = array(
     0 => array(2753,8,16,21,39,50,52,4),
     1 => array(2754,11,18,31,35,39,42,34),
     2 => array(2755,7,19,34,39,40,52,8)
     );
     echo '<pre>',print_r($new_array),'</pre>';

然后我改变这个数组,使用这个PHP代码显示在括号中:

     foreach ($new_array as $new_array2) {
    echo '[';
    foreach ($new_array2 AS $value){
        if (1 == strlen($value)) {
            $zero=0;
            $value = '"'.$zero.$value.'"';
        }
        echo $value;
        if($value!==end($new_array2)){ //referencias: http://stackoverflow.com/a/8780881/1883256
            if(strpos($value, "'") > 0 || strpos($value, '"') > 0){
            // contains either " or '
            echo '';
            }else{echo', ';}
        }/*else{echo 'f';}*/
    }
    echo ']';//referencias: http://www.mydigitallife.info/how-to-access-php-array-and-multidimensional-nested-arrays-code-syntax/
    if($new_array2!==end($new_array)){
        echo ',';
    }else{ echo '';}
}
echo ']';

阵列最终看起来像这样:

[2753, "08", 16, 21, 39, 50, 52, "04", ],[2754, 11, 18, 31, 35, 39, 42, 34],[2755, "07", 19, 34, 39, 40, 52, "08", ]] 

我想要的是将前导零添加到单个数字。这样可以正常工作,但问题是,当每个数组的末尾出现一个数字时,它仍然有一个逗号,这会导致我的脚本失败。当这个单个数字在双引号之间时,看起来像是忽略了end()函数。

我正在使用end()函数来检查是否已到达数组的最后一个元素。如果没有,则添加逗号,如果是,则不添加逗号。但是,当值为“04”,“05”等时,即使它是最后一个值,仍然会添加逗号(检查以2753开头的第一个数组并注意其他数组看起来很好)。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

这样的事情怎么样?

$result = array();
     $new_array = array(
     0 => array(2753,8,16,21,39,50,52,4),
     1 => array(2754,11,18,31,35,39,42,34),
     2 => array(2755,7,19,34,39,40,52,8)
     );

     foreach($new_array as $new_array2){
        $temp = array();

        foreach($new_array2 as $val){
            if (strlen($val) == 1) {
                $temp[] = '"' . str_pad($val,2,"0",STR_PAD_LEFT) . '"';
            } else {
                $temp[] = $val;
            }
        }

        $result[] = '[' . implode(', ',$temp) . ']';
     }

     echo implode(',',$result);

这将导致

[2753, "08", 16, 21, 39, 50, 52, "04"],[2754, 11, 18, 31, 35, 39, 42, 34],[2755, "07", 19, 34, 39, 40, 52, "08"] 

答案 1 :(得分:2)

始终添加逗号,然后当您生成整个数组时,将其删除:

     $new_array = array(
 0 => array(2753,8,16,21,39,50,52,4),
 1 => array(2754,11,18,31,35,39,42,34),
 2 => array(2755,7,19,34,39,40,52,8)
 );

$out = "";
foreach ($new_array as $new_array2) {
    $out .= '[';
    foreach ($new_array2 AS $value){
        if (1 == strlen($value)) {
            $out .= '"0'.$value.'"';
        } else {
            $out .= $value;
        }
        $out .=', ';
    }
    $out = substr($out,0,-2). '], ';
}
$out = substr($out,0,-2);
echo $out;

这是一个codepad样本

答案 2 :(得分:1)

最简单的是内爆而不是连接你自己的字符串:

foreach($new_array as $values) {
    $values = array_map(function($v) { return sprintf('%1$02s', $v); }, $values);
    $result[] = '['.implode(',', $values).']';
}
$result = implode(',', $result);