I've looked through the other similar questions but couldnt find one that matched what I was trying to do.
I have 2 arrays, with different keys, and of different lengths. I need to update the values of one array with the values of the second. The second array will be of variable length, it is not set at a specific number.
$times = [
[ 'time' => '00:00', 'status' => 'unset' ],
[ 'time' => '01:00', 'status' => 'unset' ],
[ 'time' => '02:00', 'status' => 'unset' ],
[ 'time' => '03:00', 'status' => 'unset' ],
[ 'time' => '04:00', 'status' => 'unset' ],
[ 'time' => '05:00', 'status' => 'unset' ],
[ 'time' => '06:00', 'status' => 'unset' ],
[ 'time' => '07:00', 'status' => 'unset' ],
[ 'time' => '08:00', 'status' => 'unset' ],
[ 'time' => '09:00', 'status' => 'unset' ],
[ 'time' => '10:00', 'status' => 'unset' ],
[ 'time' => '11:00', 'status' => 'unset' ],
[ 'time' => '12:00', 'status' => 'unset' ],
[ 'time' => '13:00', 'status' => 'unset' ],
[ 'time' => '14:00', 'status' => 'unset' ],
[ 'time' => '15:00', 'status' => 'unset' ],
[ 'time' => '16:00', 'status' => 'unset' ],
[ 'time' => '17:00', 'status' => 'unset' ],
[ 'time' => '18:00', 'status' => 'unset' ],
[ 'time' => '19:00', 'status' => 'unset' ],
[ 'time' => '20:00', 'status' => 'unset' ],
[ 'time' => '21:00', 'status' => 'unset' ],
[ 'time' => '22:00', 'status' => 'unset' ],
[ 'time' => '23:00', 'status' => 'unset' ],
];
$times
is the array that I need to update the values of, $times
will always have an index of 24 (24 hours in a day right). The other array $slots
will look something like this (I've trimmed it down for brevity)
$slots = [
[
'id' => '104',
't_id' => '41',
'u_id' => null,
'status' => 'available',
'start_time' => '2017-08-01 12:00:00',
'end_time' => '2017-08-01 13:00:00',
'update_time' => '0000-00-00 00:00:00',
],
[
'id' => '105',
't_id' => '41',
'u_id' => null,
'status' => 'available',
'start_time' => '2017-08-01 15:00:00',
'end_time' => '2017-08-01 16:00:00',
'update_time' => '0000-00-00 00:00:00',
],
[
'id' => '106',
't_id' => '41',
'u_id' => null,
'status' => 'unavailable',
'start_time' => '2017-08-01 17:00:00',
'end_time' => '2017-08-01 18:00:00',
'update_time' => '0000-00-00 00:00:00',
],
];
OK so what I need to do, is update the $times
array with the status
of the $slots
array where the $slots
start_time
matches the $times
time
In order to get the time
and start_time
to match, I am using the following code
foreach ( $slots as $slot ) {
$slot_time = new DateTime( $slot[ 'start_time' ] );
$slot_time = $slot_time->format( 'H:i' );}
You are in right direction. You can do following;
$times_time = array_column($times, "time"); //only contain `time` values
foreach ( $slots as $slot ) {
$slot_time = new DateTime( $slot[ 'start_time' ] );
$slot_time = $slot_time->format( 'H:i' );
$search_key = array_search($slot_time,$times_time);
if($search_key>0){ //search key
$times[$search_key]['status']=$slot[ 'status' ];
}
}
print_r($times);
you add this code to your last foreach
The ampersand &
let the value $t
of the array be modifiable
foreach ( $slots as $slot ) {
$slot_time = new DateTime( $slot[ 'start_time' ] );
$slot_time = $slot_time->format( 'H:i' );
foreach ($times as &$t)
if( $t['time']==$slot_time){
$t['status']=$slot['status'];
}
}
and here's the output of the execution , where I have used print_r($times);
<html>
<head>
<title>Online PHP Script Execution</title>
</head>
<body>
<?php
$times = [
[ 'time' => '00:00', 'status' => 'unset' ],
[ 'time' => '01:00', 'status' => 'unset' ],
[ 'time' => '02:00', 'status' => 'unset' ],
[ 'time' => '03:00', 'status' => 'unset' ],
[ 'time' => '04:00', 'status' => 'unset' ],
[ 'time' => '05:00', 'status' => 'unset' ],
[ 'time' => '06:00', 'status' => 'unset' ],
[ 'time' => '07:00', 'status' => 'unset' ],
[ 'time' => '08:00', 'status' => 'unset' ],
[ 'time' => '09:00', 'status' => 'unset' ],
[ 'time' => '10:00', 'status' => 'unset' ],
[ 'time' => '11:00', 'status' => 'unset' ],
[ 'time' => '12:00', 'status' => 'unset' ],
[ 'time' => '13:00', 'status' => 'unset' ],
[ 'time' => '14:00', 'status' => 'unset' ],
[ 'time' => '15:00', 'status' => 'unset' ],
[ 'time' => '16:00', 'status' => 'unset' ],
[ 'time' => '17:00', 'status' => 'unset' ],
[ 'time' => '18:00', 'status' => 'unset' ],
[ 'time' => '19:00', 'status' => 'unset' ],
[ 'time' => '20:00', 'status' => 'unset' ],
[ 'time' => '21:00', 'status' => 'unset' ],
[ 'time' => '22:00', 'status' => 'unset' ],
[ 'time' => '23:00', 'status' => 'unset' ],
];
$slots = [
[
'id' => '104',
't_id' => '41',
'u_id' => null,
'status' => 'available',
'start_time' => '2017-08-01 12:00:00',
'end_time' => '2017-08-01 13:00:00',
'update_time' => '0000-00-00 00:00:00',
],
[
'id' => '105',
't_id' => '41',
'u_id' => null,
'status' => 'available',
'start_time' => '2017-08-01 15:00:00',
'end_time' => '2017-08-01 16:00:00',
'update_time' => '0000-00-00 00:00:00',
],
[
'id' => '106',
't_id' => '41',
'u_id' => null,
'status' => 'unavailable',
'start_time' => '2017-08-01 17:00:00',
'end_time' => '2017-08-01 18:00:00',
'update_time' => '0000-00-00 00:00:00',
],
];
$param = array();
for($i=0;$i<count($times);$i++){
for($j=0;$j<count($slots);$j++){
if($times[$i]['time']==date('H:i',strtotime($slots[$j]['start_time']))){
$times[$i]['start_time'] = date('H:i',strtotime($slots[$j]['start_time']));
$param[$i]['time']=$times[$i]['time'];
$param[$i]['status'] = $times[$i]['status'];
$param[$i]['start_time'] = $times[$i]['start_time'];
}
}
}
print_r($param);
?>
</body>
</html>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.