PHP code loop optimization

Is there a way to optimize this piece of code to work faster? I would be grateful for any suggestions!

This piece of code handles the transfer of edges when creating a graph.

foreach($times_arrival as $city_id => $time_points) {
// if city is not prohibited for transfers and there is and exists any departure times for this city
if (isset($times_departure[$city_id]) && isset($cities[$city_id]))
{
    foreach($times_arrival[$city_id] as $t1_info) 
    {
        foreach($times_departure[$city_id] as $t2_info) 
        {
            if ($t1_info[0] != $t2_info[0]) //transfers are allowed only for different passages
            {
                $t1 = $t1_info[1];
                $t2 = $t2_info[1];

                $vertex_key = new Vertex($city_id, $t1, 1);
                $vertex_key = $vertex_key->toString();

                //minimum transfer time is 10 min.
                if (date('H:i', strtotime($t2)) > date('H:i', strtotime('+ 10 minutes', strtotime($t1))))
                {
                    $this->graph[$vertex_key][] = new Edge(
                        NULL,
                        $vertex_key, 
                        new Vertex($city_id, $t2, 0),
                        (float) 0,
                        $f((strtotime($t2) - strtotime($t1)) / 60, 0, 1) //edge weight
                    );
                }
                //if transfer is on the bound of the twenty-four hours
                else if (date('H:i', strtotime('+ 24 hours', strtotime($t2))) > date('H:i', strtotime('+ 10 minutes', strtotime($t1))))
                {
                    $this->graph[$vertex_key][] = new Edge(
                        NULL, 
                        $vertex_key,
                        new Vertex($city_id, $t2, 0),
                        (float) 0,
                        $f(strtotime('+ 24 hours', strtotime($t2)) - strtotime($t1) / 60, 0, 1) //edge weight
                    );
                }
            }
        }
    }
}
}

example variables:

var_dump($times_arrival); //$times_departure have the same structure
array
  3 => 
    array
      0 => 
        array
          0 => string '1' (length=1)
          1 => string '08:12' (length=5)
      1 => 
        array
          0 => string '2' (length=1)
          1 => string '08:40' (length=5)
  41 => 
    array
      0 => 
        array
          0 => string '21' (length=2)
          1 => string '12:40' (length=5)
+3
source share
2 answers

Thanks everyone! The reason for the slow speed was to use the strtotime()and functions date().

0
source

In this case, only you can tell if you have chosen a good or bad algorithm. From my point of view, your code has no additional calculations.

Only one recommendation - use Xdebug to profile your code and find out where the bottleneck is, if possible.

-1
source

All Articles