J'ai par exemple:

$hours = "10:11 - 13:34";

Quelle est la meilleure façon d'obtenir des minutes avec cette chaîne? Je voudrais surtout les avoir dans le tableau, par exemple

$results = array(11, 34);

Alors peut aussi être:

$hours = "7:10 - 22:00";
$hours = "07:55-14:15";
$hours = "07:55 -14:15";

Etc...

Je peux:

$expl = explode('-', trim($hours)); 

Et ensuite exploser par ":", mais c'est peut-être une meilleure façon?

php
1
feva 8 août 2017 à 12:51

2 réponses

Meilleure réponse

Je pense que preg_match_all est ce dont vous avez besoin

$a = "7:10 - 22:00";

preg_match_all("/[0-9]+:(?P<minutes>[0-9]+)/", $a, $matches);

$minutes = array_map(
    function($i) {
        return intval($i);
    },
    $matches["minutes"]
);

var_dump($minutes);

Le résultat:

array(2) {
  [0]=>
  int(10)
  [1]=>
  int(0)
}
2
katona.abel 8 août 2017 à 09:58

Vous pouvez utiliser la classe DateTime de PHP pour manipuler les dates et les heures, plutôt que d'utiliser la manipulation de chaînes.

$time = '10:11';
$minutes = DateTime::createFromFormat('H:i', $time)->format('i');
echo $minutes; // 11

Donc pour votre exemple:

$hours = "10:11 - 13:34";

// Extract times from string
list($time1, $time2) = explode('-', $hours);

// Remove white-space
$time1 = trim($time1);
$time2 = trim($time2);

// Format as minutes, and add into an array
$result = [
    DateTime::createFromFormat('H:i', $time1)->format('i'),
    DateTime::createFromFormat('H:i', $time2)->format('i'),
];

print_r($result);

=

Array
(
    [0] => 11
    [1] => 34
)
1
iainn 8 août 2017 à 10:00