为数组中的所有值生成一个新值


Generate a new value for all values in an array

我的数组看起来像这样

array(2) {
  [0]=>
  array(5) {
    ["FI_ID"]=>
    string(3) "577"
    ["FI_Stru_Code"]=>
    string(13) "MCTS-70-631/1"
    ["FI_Ins_NO"]=>
    string(1) "1"
    ["FI_Type"]=>
    string(10) "Percentage"
    ["FI_Ins_Amount"]=>
    string(5) "60.00"
  }
  [1]=>
  array(5) {
    ["FI_ID"]=>
    string(3) "578"
    ["FI_Stru_Code"]=>
    string(13) "MCTS-70-631/1"
    ["FI_Ins_NO"]=>
    string(1) "2"
    ["FI_Type"]=>
    string(10) "Percentage"
    ["FI_Ins_Amount"]=>
    string(5) "40.00"
  }
}

我想把它变成这样

array(2) {
  [0]=>
  array(5) {
    ["FI_ID"]=>
    string(3) "577"
    ["FI_Stru_Code"]=>
    string(13) "MCTS-70-631/1"
    ["FI_Ins_NO"]=>
    string(1) "1"
    ["FI_Type"]=>
    string(10) "Percentage"
    ["FI_Ins_Amount"]=>
    string(5) "18000.00" // 30000*60% (I want to apply this to every FI_Ins_Amount)
  }
  [1]=>
  array(5) {
    ["FI_ID"]=>
    string(3) "578"
    ["FI_Stru_Code"]=>
    string(13) "MCTS-70-631/1"
    ["FI_Ins_NO"]=>
    string(1) "2"
    ["FI_Type"]=>
    string(10) "Percentage"
    ["FI_Ins_Amount"]=>
    string(5) "12300.00"  // 30000*40%
  }
}

我尝试使用以下函数

$courseFee = 30000;
function installmentFixed($value,$courseFee)
{
    return $value["FI_Ins_Amount"]/100  * $courseFee;
}
$installmentFixed = array_map("installmentFixed", $installment);
var_dump($installmentFixed);

但它似乎无法正常工作。为什么?

它返回

array(2) {
  [0]=>
  float(0)
  [1]=>
  float(0)
}
foreach($array as $key => &$value) {
    $value['FI_Ins_Amount'] *= 300;
}

代码板

这就是

我想要的

$courseFee = 30000;
$installmentFixed = array_map(function($value) use ($courseFee)
{
   return array("FI_Ins_NO" => $value["FI_Ins_NO"], "FI_Ins_Amount" => number_format($value["FI_Ins_Amount"]/100  * $courseFee, 2, '.00', ''));
}, $installment);

installmentFixed 函数返回固定值;在此示例中,您将获得一个在变量$installmentFixed中具有两个"固定"值的数组。

要修复数组中的值,您可以使用 foreach 迭代数组元素;或者尝试编写(注意按值传递)

function installmentFixed(&$value,$courseFee)
{
    $value["FI_Ins_Amount"] = $value["FI_Ins_Amount"]/100  * $courseFee;
}
如果要

将其他信息传递给回调,则需要使用 use 关键字,或者最好使用 array_walk() 它允许您将附加值附加到回调函数

$courseFee = 30000; // 
function installmentFixed(&$value, $key, $courseFee) {
    $value["FI_Ins_Amount"] = $value["FI_Ins_Amount"] / 100  * $courseFee;
}
array_walk($instalment, "installmentFixed", $courseFee);
var_dump($instalment);

请注意,array_walk接受通过引用传递的数组,因此它直接更新原始数组

如果你想改用array_map,那么你最好使用闭包,这样你就可以传递带有use的附加参数

$courseFee = 30000; // 
$installmentFixed = array_map(
    function ($value) use ($courseFee) {
        $value["FI_Ins_Amount"] =
            $value["FI_Ins_Amount"] / 100  * $courseFee;
        return $value;
    },
    $instalment
);
var_dump($installmentFixed);
<?php
$array = array (
   0=> array (
    "FI_ID"=> "577",
    "FI_Stru_Code"=> "MCTS-70-631/1",
    "FI_Ins_NO"=> "1",
    "FI_Type"=> "Percentage",
    "FI_Ins_Amount"=> "60.00"
  ),
  1=>array (
    "FI_ID"=> "578",
    "FI_Stru_Code"=> "MCTS-70-631/1",
    "FI_Ins_NO"=> "2",
    "FI_Type"=> "Percentage",
    "FI_Ins_Amount"=> "40.00"
  )
);
$courseFee = 30000; // 
foreach($array as $key => $value) {
    $value['FI_Ins_Amount'] = ($value['FI_Ins_Amount']/100) * $courseFee;
    $array[$key] = $value; //Without This line some php versions will not show modified value.
}
var_dump($array);
?>