Php添加关联数组键如果不退出?

时间:2018-01-12 12:46:18

标签: php arrays

我有一个为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)都有值?

2 个答案:

答案 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);

Demo

说明:

  • 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);
}