Совершенно глупый вопрос, но я уже устал искать решение. Как занести $d2 в массив по типу $d1? PHP: foreach ($arr_record as $key1 => $record) { if($record->record_washclass == 2){ $d1 = new DateTime("2015-01-01 $key"); $d2 = new DateTime("2015-01-01 $key"); $newKey = $key; try { $diff30Min = new DateInterval('PT30M'); $diff60Min = new DateInterval('PT60M'); $d1->add($diff30Min); $d2->add($diff60Min); $newKey = $d1->format('H:i:s'); }catch(Exception $e){ echo $e->getMessage(); } $arr_records[$newKey][$key1] = $record; } } }
А не могли бы вы психонуть и сформулировать так, чтобы это было еще и понятно? Показать, что ли массив, который должен быть в результате, описать суть того, что происходит в вашем коде и т.д. --- Добавлено --- P.S. Чтобы потом лишний раз не спрашивать - откуда у вас берется переменная $key? Не $key1, а именно $key.
PHP: foreach ($arr_records as $key => $arr_record) { foreach ($arr_record as $key1 => $record) { if($record->record_washclass == 2){ $d1 = new DateTime("2015-01-01 $key"); $d2 = new DateTime("2015-01-01 $key"); $newKey = $key; try { $diff30Min = new DateInterval('PT30M'); $diff60Min = new DateInterval('PT60M'); $d1->add($diff30Min); $d2->add($diff60Min); $newKey = $d1->format('H:i:s'); }catch(Exception $e){ echo $e->getMessage(); } $arr_records[$newKey][$key1] = $record; } } } Прошу прощения, строчку кода пропустил. Нужно, чтобы в массив $arr_record записывалось два интервала: 30 и 60 минут. В настоящий момент записывается только в 30 минут.
Короче, предположу, что в $arr_records у вас массив объектов. Что-то в этом роде: PHP: array ( '05:12:05' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 2, )), ), '15:15:15' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 1, )), ), '23:59:59' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 2, )), ), ) И допустим, что я понял вашу задачу: PHP: foreach ($arr_records as $key => $arr_record) { foreach ($arr_record as $key1 => $record) { if($record->record_washclass == 2){ $d1 = new \DateTimeImmutable("2015-01-01 $key"); $key30Min = $d1->add(new \DateInterval('PT30M'))->format('H:i:s'); $key60Min = $d1->add(new \DateInterval('PT60M'))->format('H:i:s'); $arr_records[$key30Min][$key1] = $record; $arr_records[$key60Min][$key1] = $record; } } } Тогда на выходе у вас будет такой результат: PHP: array ( '05:12:05' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 2, )), ), '15:15:15' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 1, )), ), '23:59:59' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 2, )), ), '05:42:05' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 2, )), ), '06:12:05' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 2, )), ), '00:29:59' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 2, )), ), '00:59:59' => array ( 0 => stdClass::__set_state(array( 'record_washclass' => 2, )), ), )
Код (Text): [16:30:00] => Array ( [4752] => Record Object ( [record_id] => 73933 [record_user_id] => 29328 [record_org_id] => 1795 [record_block_id] => 4752 [record_date] => 2018-02-21 [record_time] => 16:00:00 [record_tz] => 10 [record_sdate] => 2018-02-21 [record_stime] => 16:00:00 [record_car_id] => 5749 [record_carText] => CR-V [record_isCompleted] => 1 [record_isConfirmed] => 1 [record_isCanceled_by_admin] => 0 [record_isCanceled_by_user] => 0 [record_isNotCompleted] => 0 [record_created_by_admin] => 0 [record_name] => 1519169400 1519214102 1519198200 25200 [record_washclass] => 2 [record_isFree] => 0 [record_comments] => [record_change_time] => 0 [record_isbusy] => 0 ) ) вот примерный ответ. А за счет добавления интервала должен появиться тот же массив, только в самой первой строчке вместо [16:30:00] => Array должно быть [17:00:00] => Array. Если объяснять непрофессиональным языком
Надеюсь, что вы понимаете, что при совпадении ключей, каждый последующий будет перезаписывать предыдущее его значение.
@Golovorot, код я вам показал выше. Если не так, то опять же повторю то, с чего начал - покажите желаемый результат.
А, решение не заметил) То есть двумя различными ключам вариант. Понял. Я подумываю над записью туда массива, чтобы легче дальше править было
имеется массив с информацией. Ключ в этом массиве - время, для примера возьмем : [12:00:00]. В случае, если washclass == 2, нам надо продублировать массив с ключом [12:00:00], но ключ поменять на [12:30:00]. Т.е прибавить 30 минут. В случае, который я пытаюсь здесь описать, помимо прибавленных 30 минут, нужно прибавить еще 30 минут сверху, чтобы был третий схожий массив, который отличался только лишь временем, в данном случае это - [13:00:00]
@Golovorot, про это я догадался. Другой вопрос - для каких целей этот массив будет использоваться в дальнейшем. И больше всего меня смущает то, что дублирование ключей, о чем я говорил выше, тут совсем не маловероятная ситуация, тем более, если объем данных не маленький. Объясню на упрощенном примере. Есть массив: PHP: <?php $arr = [ 5 => [ 'val' => 'Val 5', 'flag' => 2, ], 7 => [ 'val' => 'Val 7', 'flag' => 1, ], 8 => [ 'val' => 'Val 8', 'flag' => 2 ], 10 => [ 'val' => 'Val 10', 'flag' => 1 ], ]; Если flag == 2, то добавляем новый элемент с ключом == текущий ключ + 2: PHP: <?php foreach($arr as $key => $item) { if($item['flag'] == 2) { $arr[$key + 2] = $item; } } На выходе получаем такой результат PHP: Array ( [5] => Array ( [val] => Val 5 [flag] => 2 ) [7] => Array ( [val] => Val 5 [flag] => 2 ) [8] => Array ( [val] => Val 8 [flag] => 2 ) [10] => Array ( [val] => Val 8 [flag] => 2 ) ) Как видите, у второго элемента теперь данные из первого, а у четвертого - из третьего. Так же может произойти и у вас, когда добавляя 30/60 минут, окажется, что ключ с таким временем уже существует.
Нет, такого не повторится, тк потом идет проверка на еще один параметр. Используется дальше этот массив чисто для визуального отображения. Тут washclass == 2, занимаются сразу 2 ячейки