#php #arrays
#php #массивы
Вопрос:
У меня есть массив следующим образом :-
$alldatesandtimes = ["2016-10-04 00:00:01","2016-10-04 23:59:59","2016-10-05 00:00:01","2016-10-05 23:59:59","2016-10-06 00:00:01","2016-10-06 23:59:59"]
Я хочу назначить datein в качестве индекса первого элемента и dateout для 2-го элемента. Затем datein в качестве индекса 3-го элемента и dateout для 4-го элемента и так далее и тому подобное для всех остальных элементов.
итак, первый индекс должен быть datein, а 2-й индекс должен быть dateout, затем продолжайте до последнего элемента.
У меня есть следующий код :-
$keys = array();
$result = array();
for($j=0; $j<((sizeof($alldatesandtimes))/2); $j )
{
$keys[] = "datein";
$keys[] = "dateout";
}//end for loop
for($i = 0; $i< sizeof($alldatesandtimes); $i )
{
$result[][$keys[$i]] =$alldatesandtimes[$i];
}
он возвращает следующий массив :-
$result = Array ( [0] => Array ( [datein] => 2016-10-04 00:00:01 ) [1] => Array ( [dateout] => 2016-10-04 23:59:59 ) [2] => Array ( [datein] => 2016-10-05 00:00:01 ) [3] => Array ( [dateout] => 2016-10-05 23:59:59 ) [4] => Array ( [datein] => 2016-10-06 00:00:01 ) [5] => Array ( [dateout] => 2016-10-06 23:59:59 ) )
но я хочу
$result = ['datein' => '2016-10-04 00:00:01', 'dateout' => '2016-10-04 23:59:59', 'datein' => '2016-10-05 00:00:01', .....
Пожалуйста, помогите мне?
Комментарии:
1. невозможные индексы должны быть уникальными.
2. просто добавьте свои ключи в исходный массив
3. Итак, я предположил,
$result[][$keys[$i]]
что вы хотите многомерность, если нет, то см. Комментарий @RobertParham.
Ответ №1:
Вы можете разбить его на пары, а затем объединить пары значений с парой ключей:
foreach(array_chunk($alldatesandtimes, 2) as $pair) {
$result[] = array_combine(['datein', 'dateout'], $pair);
}
Ответ №2:
Не так причудливо, как ответ Абры, но…
$newDates = array();
$dateHolder = array();
foreach($alldatesandtimes as $k=>$v){
$key = $k%2===0 ? "dateIn" : "dateOut";
$newDates[$key] = $v;
if(count($newDates)===2){
$dateHolder[] = $newDates;
$newDates = array();
}
}
$alldatesandtimes = $dateHolder;
Ответ №3:
Вы можете зациклить массив, увеличив переменную $ i на два ($ i 2). Таким образом, вы все получаете каждый второй элемент. после этого назначьте новый массив другому массиву следующим образом
$result[]=array("datein"=>$arr[$i], "dateout" => $arr[$i 1]);
Комментарии:
1. если вы делаете это так, предполагая, что $ i увеличивается только на единицу в каждом цикле, конечная дата всегда будет начальной датой для следующего массива.
2. Я явно упомянул, что цикл должен увеличивать $ i 2 вместо $ i
3. я этого не видел, но было бы проще и понятнее, если бы вы просто добавили цикл к ответу..