[英]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
数组并检查$array
中YEAR
值的每个“年份”值。 如果它们匹配,您可以只替换$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.