數(shù)組A:
$a = [
0 => ['num' => 100],
1 => ['num' => 105],
3 => ['num' => 253],
N.......
]
數(shù)組B:
$b = [
0 => [
'id' => 1,
'num' => 300
],
1 => [
'id' => 2,
'num' => 600
],
2 => [
'id' => 3,
'num' => 900
],
N........
]
疑問:我想要遍歷出數(shù)組A里面num小于500的記錄,然后用數(shù)組B里面的num去填充它,如果數(shù)組A里面的num已經(jīng)等于500就跳過,最后還要有個數(shù)組來記錄數(shù)組B中,那些ID參與了填充····,求指教下代碼如何提現(xiàn)...貌似要遞歸?
4 回答

呼如林
TA貢獻(xiàn)1798條經(jīng)驗 獲得超3個贊
偽代碼如下
// b 的索引
$index = 0
// b 參與填寫 的數(shù)組
$contains = []
// for 循環(huán) a
for ():
if (a [i]>= 500)
continue
else
a[i].num = b[$index].num
$contains.push(b[$index].id)
$index++
不好意思,php 學(xué)過 但是忘記了,如果 b 可以隨便填充a, 這樣處理 就可以了
如果b 也要 大于 500 才能填充的話,你 直接 把 b 小于 500給處理掉就可以了

藍(lán)山帝景
TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊
我也說個思路:
- 用
array_filter
把數(shù)組a里條件符合的篩出來 - 第一次
array_replace
,用數(shù)組b替換掉 [1] 里篩出來的值 - 第二次
array_replace
,用 [2] 替換掉數(shù)組a里的值 - 跑循環(huán),用
array_key_exists
判斷數(shù)組a里的每個數(shù)組元素是否存在名為'id'的key,如果存在就整條push到一個新數(shù)組里然后unset
掉
可能不太優(yōu)雅……就是多一種角度吧。

jeck貓
TA貢獻(xiàn)1909條經(jīng)驗 獲得超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貢獻(xiàn)1799條經(jīng)驗 獲得超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 關(guān)注
- 603 瀏覽
添加回答
舉報
0/150
提交
取消