如何优化多次检查数组索引并初始化值1

时间:2018-09-27 02:47:28

标签: php

我有一个字符串为“ 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;
}

如何避免在这里检查多个条件,而我需要以某种最佳方式优化此条件。谢谢您的任何帮助。

2 个答案:

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

https://3v4l.org/thpfU


请记住三个事项,可以使代码看起来更好,并带有循环。
我相信它会执行相同的操作。

foreach($array as &$val){
    if(!$val) $val=1;
}