数组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给处理掉就可以了
蓝山帝景
TA贡献1843条经验 获得超7个赞
我也说个思路:
- 用
array_filter
把数组a里条件符合的筛出来 - 第一次
array_replace
,用数组b替换掉 [1] 里筛出来的值 - 第二次
array_replace
,用 [2] 替换掉数组a里的值 - 跑循环,用
array_key_exists
判断数组a里的每个数组元素是否存在名为'id'的key,如果存在就整条push到一个新数组里然后unset
掉
可能不太优雅……就是多一种角度吧。
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);
守着星空守着你
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);
- 4 回答
- 0 关注
- 579 浏览
添加回答
举报
0/150
提交
取消