我有一个为Google Chart填充数组的函数。但有时一个特定的值不存在,我有一个简短的数组键
这就是我想要的
Array
(
[P] => 72
[U] => 1
[X] => 0
[w] => 0
)
P,U,X和W是来自另一个关键字“code”
的关联数组的值Php函数问题,如果键值不存在则不会进入数组
function convertJS($inputArray) {
// $lookup = ['P','U','X','W'];
foreach ($inputArray as $key => $value) {
$tmp[$value['code']] += 1;
}
/*
if (in_array($value['code'], $lookup)) {
$tmp[$value['code']] += 1;
} else {
}
*/
return $tmp;
}
这就是我得到的:
Array
(
[P] => 72
[U] => 1
)
那么如何确保每个键(P,U,X,W)都有值?
答案 0 :(得分:1)
不要为已经解决的任务编写自己的代码,而是使用 force,Luke 数组辅助函数:
$inputArray = [
['code' => 'P'],
['code' => 'P'],
['code' => 'U'],
['code' => 'U']
];
$chars = ['P', 'U', 'X', 'W'];
$result = array_merge(
array_fill_keys($chars, 0),
array_count_values(array_column($inputArray, 'code'))
);
var_dump($result);
说明:
array_fill_keys()创建一个'默认计数数组',所有提供的字符都作为键,0
作为默认值
array_column()接受一个数组并检索每个元素的特定属性(在本例中为code
)的值作为另一个数组
array_count_values() ...好吧,计算所提供数组中的值
array_merge只是合并这些数组,使用键的计数结果定义了那些,其余为0(默认值)。
答案 1 :(得分:1)
由于您希望使用特定键和默认值填充数组,因此必须先指定它们。您可以使用array_fill_keys
。 (由@ raina77ow提供)
$defaultKeys = ['P', 'U', 'X', 'W'];
$default = array_fill_keys($defaultKeys, 0);
您的convertJS
函数仅计算内部数组中code
字段的出现次数,您可以使用array_column
提取code
的值以供日后分析。< / p>
$codes = array_column($inputArray, 'code');
这将创建一个类似的数组:
['P', 'U', 'P', 'P', 'P', 'P', 'P', 'U', 'U', 'U', 'U', 'P', 'P'];
之后,您可以使用array_count_values
对其进行统计,以计算code
条目的出现次数。
$occurances = array_count_values($codes);
这将创建一个类似的数组:
[
'P' => 72
'U' => 7
];
最后,您只需将array_merge
return array_merge($default, $occurances);
组合:
function convertJS($inputArray) {
$defaultKeys = ['P', 'U', 'X', 'W'];
$default = array_fill_keys($defaultKeys, 0);
$codes = array_column($inputArray, 'code');
$occurances = array_count_values($codes);
return array_merge($default, $occurances);
}