Php 将一个数组中的值与另一个数组中的值合并/覆盖
我已经看过了其他类似的问题,但找不到一个和我想做的相符的 我有两个数组,具有不同的键和不同的长度。我需要用第二个数组的值更新一个数组的值。第二个数组的长度是可变的,它没有设置为特定的数字Php 将一个数组中的值与另一个数组中的值合并/覆盖,php,arrays,compare,Php,Arrays,Compare,我已经看过了其他类似的问题,但找不到一个和我想做的相符的 我有两个数组,具有不同的键和不同的长度。我需要用第二个数组的值更新一个数组的值。第二个数组的长度是可变的,它没有设置为特定的数字 $times = [ [ 'time' => '00:00', 'status' => 'unset' ], [ 'time' => '01:00', 'status' => 'unset' ], [ 'time' => '02:00
$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
是我需要更新其值的数组,$times
的索引始终为24(一天24小时)。另一个数组$slots
看起来像这样(为了简洁起见,我把它删掉了)
好的,那么我需要做的是,用$slots
数组的状态
更新$times
数组,其中$slots
开始时间
匹配$times
时间
为了使时间
和开始时间
匹配,我使用以下代码
foreach ( $slots as $slot ) {
$slot_time = new DateTime( $slot[ 'start_time' ] );
$slot_time = $slot_time->format( 'H:i' );}
你的方向是正确的。你可以做以下事情
$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);
你的方向是正确的。你可以做以下事情
$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);
您将此代码添加到最后一个
foreach
符号
&
允许修改数组的值$t
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'];
}
}
这是的输出,我使用了
print\r($times)代码>您将此代码添加到最后的foreach
符号&
允许修改数组的值$t
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'];
}
}
这是的输出,我使用了print\r($times)代码>
在线PHP脚本执行
在线PHP脚本执行
嗯,我基本上是自己写出来的,但删除了它,因为它不起作用,结果我漏掉了&,我给出了这个被接受的答案,因为它比下面的答案快一点。嗯,我基本上是自己写出来的,但删除了它,因为它不起作用,结果我漏掉了&,我给出了这个被接受的答案,因为这是一个比下面的答案稍微快一点的过程。谢谢你的答案,我非常喜欢并欣赏这个演示,上面的答案稍微快一点,这就是为什么我给出了被接受的答案。如果你真的注意到了,请检查输出时间。我的建议会稍微快一点,因为它删除了循环中不需要的循环@虚拟人我看错东西了吗?使用PHP7,我应该看哪个值?谢谢你的回答,非常喜欢它,并且很欣赏演示,上面的答案稍微快了一点,这就是为什么我给出了接受的答案。如果你真的注意到了,请检查输出时间。我的建议会稍微快一点,因为它删除了循环中不需要的循环@虚拟人我看错东西了吗?使用PHP7,我应该查看哪个值?