【问题标题】:Add second key value from same array in counting [duplicate]在计数中添加来自同一数组的第二个键值[重复]
【发布时间】:2021-07-20 08:07:32
【问题描述】:

数组 $test_count

array ( 0 => array ( 0 => array ( 'it_id' => '212', 'item' => 'Item 1', 'quantity' => '5', ), 1 => array ( 'it_id' => '1206', 'item' => 'Item 2', 'quantity' => '1', ), 2 => array ( 'it_id' => '212', 'item' => 'Item 1', 'quantity' => '1', ), ), )

如果相同的数组it_id相同,如果相同的项目在数组中超过一次,我需要输出键数量值公共值。 每个项目都有 it_id(for id) 有值,item(for name) 有值,数量有值,以同样的方式比第二个项目......

现在的输出示例:

Item id : 212 Key quantity: 2
Item id : 1206 Key quantity: 1

输出代码:

foreach($test_count as $tempo => $lol){
    foreach ($lol  as $value1) {
        $numbers1[$value1[it_id]]++;
    }

    foreach ($numbers1 as $key1 => $value1) {
        if ($value1 > 1){
            echo '<font style="color:red;"> Item id : '.$key1.' Key quantity: '.$value1.'</font><br/>';
        }else{
            echo 'Item id : '.$key1.' Key quantity: '.$value1.'<br/>';
        }
    }
}

现在我可以使用 id_it 在这个数组中找到多个项目并显示它们中有多少在数组中,但是 完全不知道如何计算数量,如何从同一个数组中获取多个键。 要得到这样的结果:

商品编号:212 关键数量:2 商品 1 数量:7

商品编号:1206 密钥数量:1 商品 2 数量:1

已解决,检查答案

小红包,如果您希望看到的结果不是数组,而是 几乎 用户友好的方式,这里是来自结果的表格代码:

代码

echo '<table rules="all" border="1">';
    foreach($out as $name => $ar) {
       foreach($ar as $v1 => $v2) {
            echo sprintf('<tr><td>%s</td><td>%s</td><td>%s</td></tr>'."\r\n",
                $name, $v1, $v2);           
        }
    }
echo '</table>';

【问题讨论】:

  • 你不应该做$numbers1[$value1[it_id]]++,在没有确定$numbers1[$value1[it_id]]确实被设置的情况下,你需要在你第一次访问它的时候正确初始化它。
  • 只需使用一个额外的数组维度 - 计算$numbers1[$value1[it_id]]['number'] 下的数字,然后将$numbers1[$value1[it_id]]['quantity'] 下的数量相加,或类似的东西。
  • Ty,会试试的,因为根本不知道怎么做
  • @Amimistik 附注:请从下次开始缩进您的代码。这使代码更具可读性。另外,共享数组的 var_export() 而不是 print_r()
  • 您是否只是编辑了您的问题以显示替代答案?请拨打tour

标签: php arrays multidimensional-array


【解决方案1】:

您只需在第一个循环中添加一个额外的增量来跟踪项目计数,如下所示:

<?php
$out = array();
foreach ($data[0] as $entry) {
    $id = $entry['it_id'];
    // Ensure the output key we're going to increment actually exists...
    if (!isset($out[$id])) {
        $out[$id] = array('item_id' => $id, 'key_quantity' => 0, 'item_quantity' => 0);
    }

    $out[$id]['key_quantity'] += 1;
    $out[$id]['item_quantity'] += $entry['quantity'];
}

这将为您提供具有以下结构的$out 数组:

array (
  212 => 
  array (
    'item_id' => '212',
    'key_quantity' => 2,
    'item_quantity' => 6
  ),
  1206 => 
  array (
    'item_id' => '1206',
    'key_quantity' => 1,
    'item_quantity' => 1
  )
)

【讨论】:

  • 也许我做错了,我得到与输入相同的数组 var_export ($out);输出: 'array ( 0 => array ( 0 => array ( 'it_id' => '212', 'item' => 'Item 1', 'quantity' => '1', ), 1 => array ( 'it_id' => '1206', 'item' => '项目 2', '数量' => '1', ), 2 => 数组 ('it_id' => '212', 'item' => '项目 1', '数量' => '1', ), ), )'
  • 此处运行示例:sandbox.onlinephpfunctions.com/code/…。你有什么不同?
  • 只有一个与您的代码不同:'$out = $test_count;' var out = 我的数组 var
  • [链接]ibb.co/G5DCzcZ
  • 有什么区别?
猜你喜欢
  • 1970-01-01
  • 2022-09-22
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多