鍍金池/ 問答/PHP/ PHP 遍歷2個數(shù)組問題求指教,用B的值去填充A的值;

PHP 遍歷2個數(shù)組問題求指教,用B的值去填充A的值;

數(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)...貌似要遞歸?

回答
編輯回答
款爺

下面是按$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);
2017年3月21日 22:32
編輯回答
吢涼

偽代碼如下

// 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 學過 但是忘記了,如果 b 可以隨便填充a, 這樣處理 就可以了
如果b 也要 大于 500 才能填充的話,你 直接 把 b 小于 500給處理掉就可以了

2017年8月23日 20:51
編輯回答
舊城人

我也說個思路:

  1. array_filter把數(shù)組a里條件符合的篩出來
  2. 第一次array_replace,用數(shù)組b替換掉 [1] 里篩出來的值
  3. 第二次array_replace,用 [2] 替換掉數(shù)組a里的值
  4. 跑循環(huán),用array_key_exists判斷數(shù)組a里的每個數(shù)組元素是否存在名為'id'的key,如果存在就整條push到一個新數(shù)組里然后unset

可能不太優(yōu)雅……就是多一種角度吧。

2017年6月27日 22:31
編輯回答
墻頭草
 $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);
2017年1月19日 15:42