如何在多维数组中添加新的键和值?

问题描述 投票:0回答:2

我想添加多维键和值数组。我有 1 个多维数组,如下所示:

<?php
$data = [
    ["name" => "albert","id"=>2101001,"value1"=>87 ,"value2"=>63,],
    ["name" => "andrew","id"=>2101002,"value1"=>76 ,"value2"=>79,],
   ];

   foreach ($data as $value) {
       $a = $value['value1'];
       $b = $value['value2'];
       $data[$value]['average'] = ($a * 0.5) + ($b * 0.6) ;
       echo $value['average'];
   }
?>

当我在浏览器中运行它时,出现警告消息 Uncaught TypeError: Illegal offset type in line $data[$value]['average'] = ($a * 0.5) + ($b * 0.6) ; 我想要的结果是这样的:

$dataresult = [
    ["name" => "albert","id"=>2101001,"value1"=>87 ,"value2"=>63, "average"=> 81.3 ],
    ["name" => "andrew","id"=>2101002,"value1"=>76 ,"value2"=>79, "average"=> 85.4],
   ];

希望你能帮助我,谢谢

php arrays multidimensional-array
2个回答
2
投票

需要在

$key
循环中获取
foreach
引用以帮助索引到
data
:

$data = [
    ["name" => "albert","id"=>2101001,"value1"=>87 ,"value2"=>63,],
    ["name" => "andrew","id"=>2101002,"value1"=>76 ,"value2"=>79,],
   ];

   foreach ($data as $key => $value) {
       $a = $value['value1'];
       $b = $value['value2'];
       $data[$key]['average'] = ($a * 0.5) + ($b * 0.6) ;
       echo $value['average'];
   }

var_dump($data);

输出:

array(2) {
  [0]=>
  array(5) {
    ["name"]=>
    string(6) "albert"
    ["id"]=>
    int(2101001)
    ["value1"]=>
    int(87)
    ["value2"]=>
    int(63)
    ["average"]=>
    float(81.3)
  }
  [1]=>
  array(5) {
    ["name"]=>
    string(6) "andrew"
    ["id"]=>
    int(2101002)
    ["value1"]=>
    int(76)
    ["value2"]=>
    int(79)
    ["average"]=>
    float(85.4)
  }
}

PHP 这里是小提琴示例


0
投票

可以通过使用数组解构来通过引用声明每行中的新

average
元素,从而在语法上缩短脚本。

当然,您选择的关联键是有问题的——这不是计算平均值的方式。

代码:(演示

foreach ($data as ['value1' => $v1, 'value2' => $v2, 'average' => &$avg]) {
    $avg = $v1 * 0.5 + $v2 * 0.6;
}
var_export($data);

输出:

array (
  0 => 
  array (
    'name' => 'albert',
    'id' => 2101001,
    'value1' => 87,
    'value2' => 63,
    'average' => 81.3,
  ),
  1 => 
  array (
    'name' => 'andrew',
    'id' => 2101002,
    'value1' => 76,
    'value2' => 79,
    'average' => 85.4,
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.