前輩您好,我有一個與一些 PHP 腳本有關的問題。
我有一個包含 time => ['12:10', '4:16', '2:5'] 的陣列,并且有一個包含“數字”型別的輸入欄位的 html 表單。
我想當我在表單輸入欄位中輸入一些值時,例如我輸入 7,所以在后端提交表單后,我在輸入欄位中輸入的數字 7 會從我上面提到的陣列中減去,我會得到結果陣列如:['5:10', '4:16', '2:5']
我嘗試過類似的方法,但無法實作我的邏輯
$val = array(1, 0, 2, 1, 1);
$subtract = 3.5;
foreach ($val as $key => $item) {
if ($subtract >= $item) {
$subtract -= $item;
$val[$key] = 0;
} else {
$val[$key] -= $subtract;
$subtract = 0;
}
}
任何形式的幫助都非常感謝
uj5u.com熱心網友回復:
您可以使用 Carbon 庫進行日期/時間操作:
<?php
use Carbon\Carbon;
$times = ['17:46', '03:05', '21:56'];
$timeshift = 3;
$new_times = array_map(
fn($t) => Carbon::createFromFormat('H:i', $t)
->subHours($timeshift)
->format('H:i'),
$times
);
在線測驗碳庫
uj5u.com熱心網友回復:
不需要庫,只需將您的第一個陣列轉換為秒:1 小時 = 3600 ;1 分鐘 = 60 ;12:10 是 12 x 3600 10 x 60,然后對 $_POST 值執行相同的操作,然后使用gmdate()檢索陣列的原始格式
$myTimes=array('12:10', '4:16', '2:5');
//do the math
$splittedTime = explode(":", $myTimes[0]); //in your case
$timeInSeconds = $splittedTime[0] * 3600 $splittedTime[1] * 60 ;
//do the same thing to your your $_POST value if needed or simply
$totalReduceby = 7 * 3600;
// get new total of seconds
$newTime= $timeInSeconds - $totalReduceby;
$result = ltrim(gmdate("H:i", $newTime),0); //ltrim to remove the leading 0
$myTimes=array($result, '4:16', '2:5');
//print_r($myTimes);
uj5u.com熱心網友回復:
time => ['12:10', '4:16', '2:5'] [...] 從陣列中減去我在輸入欄位中輸入的數字 7 我將得到如下結果陣列:[ '5:10'、'4:16'、'2:5']
你的例子有點模棱兩可。您是否只想從陣列的第一個元素中減去欄位值?還是僅來自那些大于提交值的元素?
從 mm:ss 時間字串中減去分鐘非常簡單;最簡單的可能是概括,以便減去的量也可以是mm:ss而不是總是整數分鐘。我只想把它們都炸開,把它們變成總秒數(分鐘*60 秒),減去它們,然后再變成 mm:ss。兩種轉換都可能值得擁有自己的功能:
function mmssToSeconds($timeStr) {
if (str_contains($timeStr, ':')) {
list($min, $sec) = explode(':', $timeStr);
} else {
list($min, $sec) = array($timeStr, 0);
}
if ($min < 0) {
return 60*$min - $sec;
} else {
return 60*$min $sec;
}
}
function secondsToMmss($seconds) {
$abs = abs($seconds);
$sgn = $seconds / $abs;
$min = floor($abs / 60);
$sec = $abs % 60;
return ($sgn < 0 ? '-' : '').sprintf('%d:d', $min, $sec);
}
然后減法很容易:
function subtractMinutes($from, $delta) {
return secondsToMmss(mmssToSeconds($from) - mmssToSeconds($delta));
}
如果你想從每個足夠大的元素中減去,你可以使用這樣的回圈:
foreach ($ary['time'] as $i => $t) {
if ((int)$t > $subtract) {
$ary['time'][$i] = subtractMinutes($t, $subtract);
}
}
比較有效,因為從字串到 int 的轉換忽略了第一個非數字之后的所有內容,所以 '12:10' 只是變成 12,即 > 7。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/475618.html
上一篇:在陣列或物件中查找值
