PHP如何动态为多维数组的子数组分别添加元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP如何动态为多维数组的子数组分别添加元素相关的知识,希望对你有一定的参考价值。
$a=array(0=>array("name"=>"a","mail"=>"b"),1=>array("name"=>"d","mail"=>"e"));function addkey(&$val, $key, $param)
$val[$param[\'key\']] = $param[\'val\'];
array_walk($a,\'addkey\',array(\'key\'=>\'tel\', \'val\'=>\'123\'));
print_r($a); 参考技术A php 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。可以把它当成真正的数组、列表(向量)、散列表(是映射的一种实现)、字典、集合、栈、队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。
php 数组的元素是可变化的,可以使用多种方式向php数组中添加元素:
1、在数组末尾添加元素 array[] = value; 或者为key元素赋值的方式 array[key] = value;
2、把一个数组添加到数组中 : array_push;
3、用给定的值填充数组 : array_fill。
如何添加来自不同数组的多维数组值
【中文标题】如何添加来自不同数组的多维数组值【英文标题】:how to add multidimensional array values whose values are from different arrays 【发布时间】:2021-09-25 18:46:46 【问题描述】:我整天都在与这个作斗争,希望另一双眼睛能给我一些见解。我不确定我是否以正确的方式接近这一点。我有两个数组,分别是多维数组和单数组,我想把多维数组的内容相加,其值取自单数组,其中多维数组的内容与数组相同单个数组的键。我正在使用 Laravel 构建一个应用程序。
$multidimensionArray = array:6 [▼
"A2" => array:3 [▼
0 => "A1"
1 => "A2"
2 => "A3"
]
"A1" => array:4 [▼
0 => "A1"
1 => "A6"
2 => "A5"
3 => "A2"
]
"A6" => array:1 [▼
0 => "A3"
]
"A3" => array:2 [▼
0 => "A3"
1 => "A2"
]
"A5" => array:1 [▼
0 => "A4"
]
"A4" => array:2 [▼
0 => "A4"
1 => "A3"
]
]
$singeArray = array:6 [▼
"A1" => 675.58333333333
"A2" => 1786.75
"A3" => 2897.9166666667
"A4" => 4009.0833333333
"A5" => 5120.25
"A6" => 6231.4166666667
]
如何根据从$singleArray中取值的key将$multidimensionalArray中的值相加,然后除以$multidimensionalArray中key的个数,例如:在multidimensionalArray中的key“A2”中有值A1, A2,A3和singleArray中A1,A2,A3的值分别是675.58333333333, 1786.75, 2897.9166666667,如何相加然后除以3(根据A2中值的个数)。
我希望结果是这样的
$result = array(
"A2" => 1786.75
"A1" => 3453.5
...etc
)
谢谢你:)
【问题讨论】:
【参考方案1】:这应该适合你:
$result = [];
array_walk($multidimensionArray, function($value, $key) use(&$result, $singeArray)
// get only those items from $singeArray which exist in $value
// sum and divide by 3
$result[ $key ] = array_sum( array_intersect_key( $singeArray, array_flip($value) ) ) / 3;
);
var_dump( $result );
编辑:
更新了我的答案忘记使用array_flip
【讨论】:
【参考方案2】:我会使用foreach
和array_filter
。
由于您想要平均值,因此可以使用 array_sum
完成。
这应该可以工作
$results = [];
foreach ($multidimensionArray as $key => $valueArr)
## filter out all values of interest from $singleArray
$filteredValues = array_filter($singeArray, function ($value, $identifier) use ($valueArr)
return in_array($identifier, $valueArr);
, ARRAY_FILTER_USE_BOTH);
## Here we get the average
$results[$key] = array_sum($filteredValues) / count($filteredValues);
print_r($results);
Working sandbox link
【讨论】:
以上是关于PHP如何动态为多维数组的子数组分别添加元素的主要内容,如果未能解决你的问题,请参考以下文章