如何隐藏“ array_walk”输出到数组的输出

我正在从数组中提取字符串,并使用substr()函数从这些字符串中提取特定字符。这些字符串字符表示为持续时间,基于承包商完成特定任务所花费的时间。格式如下:

$duration = array(
    '00:44:32','02:06:15','03:14:36','00:45:16'
);

这是我用来转换提取的字符,以便将持续时间转换为十进制形式的功能:

$myarray = $duration;
function func($myarray) {
    $hours = substr($myarray,-8,2);
    $minutes = substr($myarray,-5,2);
    $seconds = substr($myarray,-2);
    $hms_converted = ($hours + ($minutes/60) + ($seconds/3600));
    $decimal = round($hms_converted,4);
    echo $decimal . ",";
}
array_walk($myarray,'func');

这时,array_walk函数正在完成它的工作,并为数组中的每个记录吐出结果。看起来像这样:

<b>0.7422,2.1042,3.2433,0.7544</b>

我曾尝试像这样爆炸array_walk。但这不起作用。

explode(",",array_walk($myarray,'func'));

returns 0.7422,0.7544

我也曾尝试将array_walk分配给这样的变量。但是无济于事,我无法转换回数组。

$var = array_walk($myarray,'func');
explode(",$var);

returns 0.7422,0.7544

这是完整的代码,一个块

$duration = array(
    '00:44:32','00:45:16'
);

$myarray = $duration;
function func($myarray) {
    $hours = substr($myarray,'func');

该想法是要替换:

$duration = array(
    '00:44:32','00:45:16'
);

使用:

$duration = array(
    '0.7422','2.1042','3.2433','0.7544'
);

谢谢您的帮助!

jinjuanyang 回答:如何隐藏“ array_walk”输出到数组的输出

array_walk替换为array_map,并将回调函数更新为 return 值,而不是更新为echo

$myarray = $duration;
function func($myarray) {
    $hours = substr($myarray,-8,2);
    $minutes = substr($myarray,-5,2);
    $seconds = substr($myarray,-2);
    $hms_converted = ($hours + ($minutes/60) + ($seconds/3600));
    $decimal = round($hms_converted,4);
    // RETURN the value
    return $decimal;
}
$newArray = array_map('func',$myarray);
,

一个简单的foreach在这里就足够了,并且更清楚地完成了什么:

$duration = array(
    '00:44:32','02:06:15','03:14:36','00:45:16'
);

foreach($duration as $key => $strTime){
  list($h,$m,$s) = explode(":",$strTime);
  $newDuration[$key] = round($h + $m/60 + $s/3600,4);
}

echo "<pre>".var_export($newDuration,true)."</pre>";

输出:

array (
  0 => 0.7422,1 => 2.1042,2 => 3.2433,3 => 0.7544,)

如果要覆盖数组$ duration,请使用$ duration而不是$ newDuration。

本文链接:https://www.f2er.com/3165974.html

大家都在问