繁体   English   中英

根据另一个数组中的值替换一个数组的值

[英]Replace the values ​of one array based on the values in another array

我有以下数组

$priceYear = Array ( 
       [AZ] => Array 
             ( 
               [1] => 2020 
               [2] => 2020 
             ) 
       [BY] => Array 
             ( 
               [0] => 2020 
               [1] => 2020 
             ) 
       [CX] => Array 
             ( 
               [1] => 2020 
               [2] => 2020 
               [3] => 2020 
             ) 
       [DW] => Array 
             ( 
               [106] => 2019 
               [107] => 2019 
               [108] => 2019
             )
      ) 

还有另一个数组

$array = Array ( 
       [0] => Array 
             ( 
               [YEAR] => 2018 
               [VALUE_AMDON] => 55 
             ) 
       [1] => Array 
             ( 
               [YEAR] => 2019
               [VALUE_AMDON] => 57
             ) 
       [2] => Array 
             ( 
               [YEAR] => 2020 
               [VALUE_AMDON] => 59
             ) 
      ) 

如果来自 $priceYear == YEAR 的值,我想用 VALUE_AMDON 替换

所以 output 应该是这样的

$priceYear = Array ( 
                    [AZ] => Array 
                          ( 
                            [1] => 59 
                            [2] => 59
                          ) 
                    [BY] => Array 
                          ( 
                            [0] => 59
                            [1] => 59 
                          ) 
                    [CX] => Array 
                          ( 
                            [1] => 59
                            [2] => 59 
                            [3] => 59 
                          ) 
                    [DW] => Array 
                          ( 
                            [106] => 57
                            [107] => 57 
                            [108] => 57
                          )
             ) 

我正在这样做

function replace($var){
    global $array;
    for ($u=0; $u <sizeof($array) ; $u++) { 
        if ($var == $array[$u]['YEAR']){
            return $array[$u]['VALUE_AMDON'];
        }else{
            return $var;
        }
    }
}

foreach ($priceYear as $key => $value) {
    $priceYear[$key] = array_map('replace', $value);
}

但不幸的是它不起作用,它正在返回初始数组

如果有人可以帮助我,看起来错误很愚蠢,但我没有看到它:c

您也可以使用以下数组函数(如 array_column 和 array_search 检查)来执行此操作:

$array_year = array_column($array, "YEAR");
foreach($priceYear as $key => $val){
    foreach($val as $innerkey => $innerval){
        // Below If year exist in $array_year function return key of $array_year else return false
        $isExistKey = array_search($innerval, $array_year);
        if($isExistKey !== FALSE){
            $priceYear[ $key ][ $innerkey ] = $array[ $isExistKey ]["VALUE_AMDON"];
        }
    }
}
echo "<pre>";
print_r($priceYear);

在此处检查 output: https://paiza.io/projects/gUNIhGow6-CWO0eqWpEtxg?language=php

因为 arrays 的键之间没有直接链接,所以最简单的方法是使用嵌套循环。

您只需要遍历$priceYear数组并检查$arrayYEAR值的每个“年份”值。 如果它们匹配,您可以只替换$priceYear数组中的那个值。

注释下面的代码以告诉您每一行在做什么:

// 1. loop through the nested arrays in $priceYear
foreach ($priceYear as $key => $price_years_array) {
    foreach ($price_years_array as $index => $price_years_value) {

        // 2. Create a variable to store the new value for the year in this $priceYear array, 
        // initialised to 0 (your specified default)
        $new_year = 0;

        // 3. check each year in your $array
        foreach ($array as $replacement_values){

            // 4. if $replacement_values has a YEAR and VALUE_AMDON...
            //    and $price_years_value matches the value in YEAR...
            if( $replacement_values['YEAR'] && $replacement_values['VALUE_AMDON']
                && $replacement_values['YEAR'] == $price_years_value){

                    // 5. store this in our $new_year variable
                    $new_year = $replacement_values['VALUE_AMDON'];
             }
        }
        
        // 6. after checking all years in $array, it we found a match it will be in $new_year
        // otherwise it will still be 0. 
        // Now simple set this value  - we can access this directly using $key and $index
        $priceYear[$key][$index] = $new_year;
    }
}
var_dump($priceYear);

使用不存在年份的样本数据:

$priceYear = array(
    'AZ' => array( 1 => 2021, 2 => 2020), // <-- 2021 doesn't exist in $array
    'BY' => array( 0 => 2020, 1 => 2016), // <-- 2016 doesn't exist in $array
    'CX' => array(1 => 2020, 2 => 2020, 3 => 2020),
    'DW' => array(106 => 2019, 107 => 2019, 108 => 2019)
);

$array = array(
    array('YEAR' => 2018, 'VALUE_AMDON' => 55),
    array('YEAR' => 2019, 'VALUE_AMDON' => 57),
    array('YEAR' => 2020, 'VALUE_AMDON' => 59)
);

Output:

Array
(
    [AZ] => Array
        (
            [1] => 0       // <-- value is 0 because year didn't exist in $array
            [2] => 59
        )
    [BY] => Array
        (
            [0] => 59
            [1] => 0       // <-- value is 0 because year didn't exist in $array
        ) 
    [CX] => Array
        (
            [1] => 59
            [2] => 59
            [3] => 59
        )
    [DW] => Array
        (
            [106] => 57
            [107] => 57
            [108] => 57
        )
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM