Прошу помощи, мозг кипит. Есть масив с маршрутом и промежуточными остановками [napravlenie] А в нем еще масивы с пунтом отправления [ot] пунтом прибытия [do] и количеством забранированых мест [person]
Array (
[napravlenie] => ko-od-ki-che
[0] => Array ( [ot] => ko [do] => ki [person] => 2 )
[1] => Array ( [ot] => od [do] => ki [person] => 2 )
[2] => Array ( [ot] => od [do] => ki [person] => 2 )
[3] => Array ( [ot] => od [do] => che [person] => 1 )
[4] => Array ( [ot] => ki [do] => che [person] => 1 )
)
Задача пощитать количество занятых мест до каждого пункта. Нужно учитывать [ot] => od [do] => che проходит через ki и сответственно от od-ki место тоже занято
class TourCapacitor
{
protected $delta = [];
/**
* @param array route Маршрут с идентификаторами остановок
*/
public function __construct(array $route)
{
foreach ($route as $row) {
$this->delta[$row] = null;
}
}
public function add($itemId)
{
if ($this->delta[$itemId]) {
$this->delta[$itemId] += 1;
} else {
$this->delta[$itemId] = 1;
}
}
public function remove($itemId)
{
if ($this->delta[$itemId]) {
$this->delta[$itemId] -= 1;
} else {
$this->delta[$itemId] = -1;
}
}
/**
*
* @return array
*/
public function getCapacities()
{
$result = [];
if (!$this->delta) {
return $result;
}
$i = 0;
foreach ($this->delta as $key => $value) {
if ($value === null) {
continue;
}
// создаём новую остановку
$result[$i] = ['key' => $key, 'value' => $value];
// если есть предыдущая остановка, добавляем её значение
if ($i > 0) {
$result[$i]['value'] += $result[$i - 1]['value'];
}
$i++;
}
return $result;
}
}
Считаем
$capacity = new TourCapacitor([1, 2, 3, 4, 5]);
// $orders - массив с заказами. stationFrom - остановка посадки. stationTo - остановка высадки
foreach ($orders as $row) {
$capacity->add($row['stationFrom']);
$capacity->remove($row['stationTo']);
}
var_dump($capacity->getCapacities());
То что я искал.
header('Content-type: text/html; charset=utf-8');
$A = array(
'napravlenie' => 'ko-od-ki-che',
0 => array('ot' => 'ko', 'do' => 'ki', 'person' => 2),
1 => array('ot' => 'od', 'do' => 'ki', 'person' => 2),
2 => array('ot' => 'od', 'do' => 'ki', 'person' => 2),
3 => array('ot' => 'od', 'do' => 'che', 'person' => 1),
4 => array('ot' => 'ki', 'do' => 'che', 'person' => 1)
);
# ($A[1] == $A[2]) -->> $A[real][person] = $A[1][person] + $A[2][person] ...?
echo '<xmp>';
var_dump($A);
echo "---------------------\n\n";
$SEQ = explode('-', $A['napravlenie']);
$CUR_VAL = 0;
while (($OT = current($SEQ)) && $DO = next($SEQ)){
for ($x=0; $x<count($A)-1; ++$x){
if ($A[$x]['ot'] == $OT) $CUR_VAL += $A[$x]['person'];
elseif( $A[$x]['do'] == $OT) $CUR_VAL -= $A[$x]['person'];
}
echo "$OT-$DO => $CUR_VAL\n";
}
echo '</xmp>';
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В статье о хорошей практике написания кода написано, что нужно избегать Fluent interface ссылка на статью
Всем привет, ситуация следующаяЕсть главная страница, типа лендинга, ее сделала через файл index