我有一个字符串为“ 23:22:0”
$string = "23:22:0";
$array = explode(":", $string);
if ($array[0] == 0) {
$array[0] = 1;
}
if ($array[1] == 0) {
$array[1] = 1;
}
if ($array[2] == 0) {
$array[2] = 1;
}
如何避免在这里检查多个条件,而我需要以某种最佳方式优化此条件。谢谢您的任何帮助。
答案 0 :(得分:0)
请检查以下示例。我已注释掉您的$ string变量,并以'0:0:0'值测试了$ string。 添加了print_r()来检查值是否正确,如我们所期望的那样。 希望对您有所帮助。
//$string = "23:22:0";
$string = "0:0:0";
$array = explode(":", $string);
$array = array(
0 => ($array[0] == 0) ? 1 : $array[0],
1 => ($array[1] == 0) ? 1 : $array[1],
2 => ($array[2] == 0) ? 1 : $array[2],
);
print_r($array);
答案 1 :(得分:0)
我之所以写这个答案,是因为我认为项目数量未知。
OP现在已经阐明,它始终是三个项目。对于手头的任务来说,这可能有点矫kill过正。
如果您先删除零值,则可以创建一个带有1的新数组,并使用array_replace将其与原始数组合并。
$string = "23:22:0";
$array = explode(":", $string);
$fill = array_fill(0,count($array), 1); //create new array [1,1,1]
$array= array_filter($array); // remove zero values
$array= array_replace($fill,$array); // "merge" the arrays
var_dump($array);
输出:
array(3) {
[0]=>
string(2) "23"
[1]=>
string(2) "22"
[2]=>
int(1)
}
请记住三个事项,可以使代码看起来更好,并带有循环。
我相信它会执行相同的操作。
foreach($array as &$val){
if(!$val) $val=1;
}