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,我应该查看哪个值?