PHP 遍历2个数组问题求指教,用B的值去填充A的值;

数组A:

$a = [
    0 => ['num' => 100],
    1 => ['num' => 105],
    3 => ['num' => 253],
    N.......
]

数组B:

$b = [
    0 => [
        'id' => 1,
        'num' => 300
    ],
    1 => [
        'id' => 2,
        'num' => 600
    ],
    2 => [
        'id' => 3,
        'num' => 900
    ],
    N........
]

疑问:我想要遍历出数组A里面num小于500的记录,然后用数组B里面的num去填充它,如果数组A里面的num已经等于500就跳过,最后还要有个数组来记录数组B中,那些ID参与了填充····,求指教下代码如何提现...貌似要递归?

BIG阳
浏览 580回答 4
4回答

呼如林

伪代码如下 // b 的索引 $index = 0 // b 参与填写 的数组 $contains = [] // for 循环 a for (): if (a [i]>= 500) continue else a[i].num = b[$index].num $contains.push(b[$index].id) $index++ 不好意思,php 学过 但是忘记了,如果 b 可以随便填充a, 这样处理 就可以了如果b 也要 大于 500 才能填充的话,你 直接 把 b 小于 500给处理掉就可以了

蓝山帝景

我也说个思路: 用array_filter把数组a里条件符合的筛出来 第一次array_replace,用数组b替换掉 [1] 里筛出来的值 第二次array_replace,用 [2] 替换掉数组a里的值 跑循环,用array_key_exists判断数组a里的每个数组元素是否存在名为'id'的key,如果存在就整条push到一个新数组里然后unset掉 可能不太优雅……就是多一种角度吧。

jeck猫

下面是按$a中的key是$b中的id <?php $a = [ 0 => ['num' => 100], 1 => ['num' => 105], 3 => ['num' => 253], ]; $b = [ 0 => [ 'id' => 1, 'num' => 300 ], 1 => [ 'id' => 2, 'num' => 600 ], 2 => [ 'id' => 3, 'num' => 900 ], ]; $tmp = array_combine(array_column($b,'id'),array_column($b,'num')); $ids = []; array_walk($a, function(&$val,$key) use($tmp,&$ids){ if($val['num'] < 500 && isset($tmp[$key])){ $val['num'] = $tmp[$key]; $ids[] = $key; } }); var_dump($a); var_dump($ids);

守着星空守着你

$a = collect($a)->map(function($a1, $key) use($b){ if($a1['num'] < 500){ $b1 = collect($b)->reject(function($b1) use($key){ return $b1['id'] != $key; }); $b1 = $b1->flatMap(function($xx){ return $xx; }); if (!empty($b1->toArray())){ $a1['num'] = $b1['num']; $a1['index'] = $b1['id']; return $a1; } } })->filter(function($v){ return !empty($v); }); dd($a);
打开App,查看更多内容
随时随地看视频慕课网APP