为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
BIG阳 2019-03-16 04:51:19
数组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参与了填充····,求指教下代码如何提现...貌似要递归?
查看完整描述

4 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

伪代码如下

// 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给处理掉就可以了

查看完整回答
反对 回复 2019-03-18
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

我也说个思路:

  1. array_filter把数组a里条件符合的筛出来
  2. 第一次array_replace,用数组b替换掉 [1] 里筛出来的值
  3. 第二次array_replace,用 [2] 替换掉数组a里的值
  4. 跑循环,用array_key_exists判断数组a里的每个数组元素是否存在名为'id'的key,如果存在就整条push到一个新数组里然后unset

可能不太优雅……就是多一种角度吧。

查看完整回答
反对 回复 2019-03-18
?
jeck猫

TA贡献1909条经验 获得超7个赞

下面是按$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);
查看完整回答
反对 回复 2019-03-18
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

 $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);
查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 579 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信