我有一个来自数据库的数组:
$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开头的第一个数组并注意其他数组看起来很好)。
我该如何解决这个问题?
答案 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);