Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-对于每个循环-如果值相同(但仍然是和值),则跳过_Php_Arrays_Foreach - Fatal编程技术网

PHP-对于每个循环-如果值相同(但仍然是和值),则跳过

PHP-对于每个循环-如果值相同(但仍然是和值),则跳过,php,arrays,foreach,Php,Arrays,Foreach,我有以下建议: $Sum = ''; $CommodityCode = ''; foreach ($obj['statisticalvalues'] as $key => $value) { if (isset($obj['commoditycodes'][$key]['match'])) { //If our commodity code from last iteration is the same as current = w

我有以下建议:

 $Sum = '';
 $CommodityCode = '';
     foreach ($obj['statisticalvalues'] as $key => $value) {
         if (isset($obj['commoditycodes'][$key]['match'])) {
             //If our commodity code from last iteration is the same as current = we have a duplicate!
             if ($CommodityCode !== $obj['commoditycodes'][$key]['match']) {
                  $Sum = $value['key_0'];
              } else {
                  $Sum += $value['key_0'];
              }

              $ReturnString .= '' . $obj['commoditycodes'][$key]['match'] . '';
              $ReturnString .= '' . $Sum . '';

              //Set the code for next iteration
              $CommodityCode = $obj['commoditycodes'][$key]['match'];
            }
        }
这将输出:

CODE        VALUE
3002190000  610.20
3002190000  846.7
3002190000  1083.2
3002190000  4156.4
3002190000  4461.5
3002190000  4711.4
3002190000  5061.4
3002190000  6061
3002190000  6886.3
3002190000  7136.2
3002190000  7435.8
3002190000  8196
3002190000  8466.2
8000120000  1000.5
如您所见,
的求和正确,但它仍然为每一行打印出
code


我正在尝试这样做,所以它只会打印出不同的值——但仍然会对代码的总值求和,如下所示:

CODE        VALUE
3002190000  8466.2
8000120000  1000.5
如果需要不同的值,请使用php

钥匙总是不同的,所以你不必担心这一点

如果要保留原始数组,请使用以下代码创建一个新数组

<?php

 $newArrayDistinct = array_unique($obj['statisticalvalues']);

 foreach(newArrayDistinct as $key=>$value){

      // your code here.

 }
如果需要不同的值,请使用php

钥匙总是不同的,所以你不必担心这一点

如果要保留原始数组,请使用以下代码创建一个新数组

<?php

 $newArrayDistinct = array_unique($obj['statisticalvalues']);

 foreach(newArrayDistinct as $key=>$value){

      // your code here.

 }

假设
$input
数组每行至少有两列,即
'code'
'VALUE'
,我们可以使用
'code'
作为键(本质上是唯一的)对
$output
数组中的值求和:

$output = array();
foreach($input as $row)
{
    $key = $row['CODE'];
    $value = $row['VALUE'];
    $output[$key] = isset($output[$key]) ? $output[$key] + $value : $value;
}
print_r($output);

请注意,上述解决方案会导致
$output
阵列动态增长,这对于大型阵列来说可能是一个(时间)问题。如果是这种情况,请考虑预先计算<代码> > $输入[$i] [代码] <代码> >代码> $i=1…计数($input),这样您就可以通过使用
数组

预先分配
$output
数组,假设
$input
数组每行至少有两列,即
'code'
'VALUE'
,我们可以使用
'code'
作为键(本质上是唯一的)要对
$output
数组中的值求和:

$output = array();
foreach($input as $row)
{
    $key = $row['CODE'];
    $value = $row['VALUE'];
    $output[$key] = isset($output[$key]) ? $output[$key] + $value : $value;
}
print_r($output);

请注意,上述解决方案会导致
$output
阵列动态增长,这对于大型阵列来说可能是一个(时间)问题。如果是这种情况,请考虑预先计算<代码> > $输入[$i] [代码] <代码> >代码> $i=1…计数($input)以便您可以使用
array\u pad
预先分配
$output
数组。您只想在值更改时添加输出,该值有两个可能的位置。第一个是当您检测到代码已更改时(尽管如果这是第一次,您不想输出代码),第二个是在循环完成后(如果有,则清除最后一个条目)


(我没有数据,所以无法测试,但希望可以)

您只想在值更改时添加输出,这有两个可能的位置。第一个是当您检测到代码已更改时(尽管如果这是第一次,您不想输出代码),第二个是在循环完成后(如果有,则清除最后一个条目)


(我没有数据,所以无法测试,但希望可以)

下面是一个可能与您的问题相关的示例

$input = array(
  array('code'=>'ID001', 'value'=>100),
  array('code'=>'ID001', 'value'=>78),
  array('code'=>'ID002', 'value'=>123),
  array('code'=>'ID002', 'value'=>104),
  array('code'=>'ID001', 'value'=>119),
  array('code'=>'ID001', 'value'=>93),
  array('code'=>'ID003', 'value'=>55),
);

//process
$output=array();
foreach($input as $item){
  if(isset($output[$item['code']])){
    $output[$item['code']] += $item['value'];
  }else{
    $output[$item['code']] = $item['value'];
  }
}

//print output
echo "CODE : VALUE";
foreach($output as $code=>$value){
  echo "<br>$code : $value";
}
$input=array(
数组('code'=>'ID001','value'=>100),
数组('code'=>'ID001','value'=>78),
数组('code'=>'ID002','value'=>123),
数组('code'=>'ID002','value'=>104),
数组('code'=>'ID001','value'=>119),
数组('code'=>'ID001','value'=>93),
数组('code'=>'ID003','value'=>55),
);
//过程
$output=array();
foreach($输入为$项){
如果(isset($output[$item['code']])){
$output[$item['code']+=$item['value'];
}否则{
$output[$item['code']=$item['value'];
}
}
//打印输出
回显“代码:值”;
foreach($输出为$code=>$value){
回显“
$code:$value”; }
下面是一个可能与您的问题有关的示例

$input = array(
  array('code'=>'ID001', 'value'=>100),
  array('code'=>'ID001', 'value'=>78),
  array('code'=>'ID002', 'value'=>123),
  array('code'=>'ID002', 'value'=>104),
  array('code'=>'ID001', 'value'=>119),
  array('code'=>'ID001', 'value'=>93),
  array('code'=>'ID003', 'value'=>55),
);

//process
$output=array();
foreach($input as $item){
  if(isset($output[$item['code']])){
    $output[$item['code']] += $item['value'];
  }else{
    $output[$item['code']] = $item['value'];
  }
}

//print output
echo "CODE : VALUE";
foreach($output as $code=>$value){
  echo "<br>$code : $value";
}
$input=array(
数组('code'=>'ID001','value'=>100),
数组('code'=>'ID001','value'=>78),
数组('code'=>'ID002','value'=>123),
数组('code'=>'ID002','value'=>104),
数组('code'=>'ID001','value'=>119),
数组('code'=>'ID001','value'=>93),
数组('code'=>'ID003','value'=>55),
);
//过程
$output=array();
foreach($输入为$项){
如果(isset($output[$item['code']])){
$output[$item['code']+=$item['value'];
}否则{
$output[$item['code']=$item['value'];
}
}
//打印输出
回显“代码:值”;
foreach($输出为$code=>$value){
回显“
$code:$value”; }
你能给我们看所有相关的代码吗?帮我个忙和
var_export()
请你的测试数据:)”但仍然对代码的总值求和,如下所示:“下面的例子有“3002190000 8466.2”,但如果是一个和,那不应该是“3002190000 100k+”?你能给我们看所有相关的代码吗?帮我一个忙和
var_export()
your test data please:)”但仍然要对该代码的总值求和,如下所示:“下面的示例有“3002190000 8466.2”,但如果这是一个和,那不应该是“3002190000 100k+”?