如何根据另一个元素的条件更新数组的一个元素?

时间:2015-06-15 06:42:55

标签: php match associative-array key-value

我有一组关联数组,其NSDictionary* attribs = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSFileImmutable]; [[NSFileManager defaultManager] setAttributes: attribs ofItemAtPath:@"/path/to/file" error:nil]; (这是assoc数组的一个键)如下所示:
names
现在我有另一个更大的数组{'Red', 'Blue', 'Green'}作为键之一。像
names

根据这个,我想更新较小的(第一个)数组 较大数组的{'id'=>'23fe54','names'=>'Red','value'=>'3'},{'id'=>'90ks21','names'=>'Red','value'=>'4'},{'id'=>'44cb12','names'=>'Blue','value'=>'1'};键告诉我们需要更新较小数组的哪个关联数组。
我想将names添加到较小数组的一个字段中。

问题是如何使用条件选择较短的数组:这两个字段是否匹配。我如何确保只更新一个?

编辑:预期输出:
{'names'=>'Red','value'=>'7'},{'names'=>'Blue','value'=>'1'};

1 个答案:

答案 0 :(得分:0)

我会这样做:

<?php
$names = array('Red', 'Blue', 'Green');
$values = array(
    array('id'=>'23fe54','names'=>'Red','value'=>'3'),
    array('id'=>'90ks21','names'=>'Red','value'=>'4'),
    array('id'=>'44cb12','names'=>'Blue','value'=>'1')
);

// prepare the result array
$results = array();
foreach($names as $name) {
    $results[$name] = array('names' => $name, 'value' => 0);
}

// compute values
foreach($values as $value) {
    $results[$value['names']]['value'] += $value['value'];
}

// keep only values
$results = array_values($results);

// print "jsonified" result
echo(json_encode($results));
?>