Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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_Multidimensional Array - Fatal编程技术网

Php 在特定数组值上组合数组

Php 在特定数组值上组合数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,使用数组: Array ( [0] => Array ( [description] => EXAMI [pcchrgamt] => 190.00 [pchrgqty] => 1.00 [pchrgup] => 190.00 ) [1] => Array ( [descript

使用数组:

Array
(
    [0] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 190.00
            [pchrgqty] => 1.00
            [pchrgup] => 190.00
        )

    [1] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 40.00
            [pchrgqty] => 1.00
            [pchrgup] => 40.00
        )

)
我得到:

Array
(
    [description] => 0
    [pcchrgamt] => 230
    [pchrgqty] => 2
    [pchrgup] => 230
)
使用:

print_r( $rows1 );
 $sumArray = array();
 foreach ($rows1 as $k=>$subArray) {

 foreach ($subArray as $id=>$value) {
 $sumArray[$id]+=$value;
}
}

print_r($sumArray);
我想得到的是:

Array
(
    [0] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 230
            [pchrgqty] => 2
            [pchrgup] => 230
        )



)
也就是说,我只想组合数字量

我也不知道如何处理:

Array
(
    [0] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 190.00
            [pchrgqty] => 1.00
            [pchrgup] => 190.00
        )

    [1] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 40.00
            [pchrgqty] => 1.00
            [pchrgup] => 40.00
        )


    [2] => Array
        (
            [description] => EXAMI1
            [pcchrgamt] => 190.00
            [pchrgqty] => 1.00
            [pchrgup] => 190.00
        )

    [3] => Array
        (
            [description] => EXAMI1
            [pcchrgamt] => 40.00
            [pchrgqty] => 1.00
            [pchrgup] => 40.00
        )
)
我想根据描述进行组合,从上面我想得到:

Array
    (
        [0] => Array
            (
                [description] => EXAMI
                [pcchrgamt] => 230
                [pchrgqty] => 2
                [pchrgup] => 230
            )
         [1] => Array
            (
                [description] => EXAMI1
                [pcchrgamt] => 230
                [pchrgqty] => 2
                [pchrgup] => 230
            )



    )
描述可能很多,可能有很多,同时可能有一个独特的

如何进行这些工作


你能用这个代码代替你的代码吗

    print_r( $rows1 );
     $sumArray = array();
     foreach ($rows1 as $k=>$subArray) {
        $sumArray[$subArray['description']['description'] = $subArray['description']
        $sumArray[$subArray['description']['amt'] += $subArray['amt']
        $sumArray[$subArray['description']['qty'] += $subArray['qty']
        $sumArray[$subArray['description']['up'] += $subArray['up']

    }

    print_r([$sumArray1, $sumArray2]);

让我知道如果有任何问题

你能试试这个代码而不是你的代码吗

    print_r( $rows1 );
     $sumArray = array();
     foreach ($rows1 as $k=>$subArray) {
        $sumArray[$subArray['description']['description'] = $subArray['description']
        $sumArray[$subArray['description']['amt'] += $subArray['amt']
        $sumArray[$subArray['description']['qty'] += $subArray['qty']
        $sumArray[$subArray['description']['up'] += $subArray['up']

    }

    print_r([$sumArray1, $sumArray2]);
让我知道如果有任何问题,请尝试以下方法:

$sumArray = array();

 foreach ($rows1 as $k=>$subArray) {

     foreach ($subArray as $key=> $value) {
    if(is_numeric($value)){
                $sumArray[$subArray['description']][$key]+=$value;
         }
         else{
               $sumArray[$subArray['description']][$key]=$value;
         }
     }

}

var_dump($sumArray);
试试这个:

$sumArray = array();

 foreach ($rows1 as $k=>$subArray) {

     foreach ($subArray as $key=> $value) {
    if(is_numeric($value)){
                $sumArray[$subArray['description']][$key]+=$value;
         }
         else{
               $sumArray[$subArray['description']][$key]=$value;
         }
     }

}

var_dump($sumArray);

这里有一个相当幼稚的方法:

<?php
$records = [
    [
        'desc' => 'EXAMI',
        'amt' => 190.00,
        'qty' => 1,
        'up' => 190.00,
    ],
    [
        'desc' => 'EXAMI',
        'amt' => 40.00,
        'qty' => 1,
        'up' => 40.00,
    ],
    [
        'desc' => 'EXAMI1',
        'amt' => 190.00,
        'qty' => 1,
        'up' => 190.00,
    ],
    [
        'desc' => 'EXAMI1',
        'amt' => 40.00,
        'qty' => 1,
        'up' => 40.00,
    ],
];

function combineArrayOnKey(array $array, $key) {
    $new_array = [];

    foreach($array as $k => $v) {
        if(!is_array($v) || !isset($v[$key]))
            continue;

        // Create elements for new keys
        if(!isset($new_array[$v[$key]])) {
            $new_array[$v[$key]] = $v;
            continue;
        }

        $parent =& $new_array[$v[$key]];

        foreach($v as $kk => $vv) {
            if(!is_numeric($vv))
                continue;

            $parent[$kk] = floatval(@$parent[$kk]) + $vv;
        }
    }

    return array_values($new_array);
}

print_r(combineArrayOnKey($records, 'desc'));

这里有一个相当幼稚的方法:

<?php
$records = [
    [
        'desc' => 'EXAMI',
        'amt' => 190.00,
        'qty' => 1,
        'up' => 190.00,
    ],
    [
        'desc' => 'EXAMI',
        'amt' => 40.00,
        'qty' => 1,
        'up' => 40.00,
    ],
    [
        'desc' => 'EXAMI1',
        'amt' => 190.00,
        'qty' => 1,
        'up' => 190.00,
    ],
    [
        'desc' => 'EXAMI1',
        'amt' => 40.00,
        'qty' => 1,
        'up' => 40.00,
    ],
];

function combineArrayOnKey(array $array, $key) {
    $new_array = [];

    foreach($array as $k => $v) {
        if(!is_array($v) || !isset($v[$key]))
            continue;

        // Create elements for new keys
        if(!isset($new_array[$v[$key]])) {
            $new_array[$v[$key]] = $v;
            continue;
        }

        $parent =& $new_array[$v[$key]];

        foreach($v as $kk => $vv) {
            if(!is_numeric($vv))
                continue;

            $parent[$kk] = floatval(@$parent[$kk]) + $vv;
        }
    }

    return array_values($new_array);
}

print_r(combineArrayOnKey($records, 'desc'));

您可以使用desc作为结果的键,也可以使用结果上的数组_值作为键进行编号,您可以检查


您可以使用desc作为结果的键,也可以使用结果上的数组_值作为键进行编号,您可以检查



我想根据描述进行组合,从上面我想得到:
这是我的问题之一,值是随机的,我不能使用静态值供参考,而不是我的downvoteok..即使你对解决方案进行了否决,也很公平,但是让我想一想,然后再给你回复
我想根据描述进行组合,从上面我想得到:
这是我的问题之一,值是随机的,我不能使用静态值仅供参考,而不是我的downvoteok..即使你否决了它,如果解决方案不起作用,但是让我想一想,然后再回复你,我想用数字索引它,而不是描述,而且在我的结果中,索引是空的,让我检查一下:)这很容易处理。我将函数的
return
值包装在
array\u values()
中,以使用增量键重新索引结果。关于这个示例,您应该能够将它粘贴到一个新的
.php
文件中并运行它。你需要保留原始记录的数字键吗?我不知道为什么,但我得到了这个
Array([0]=>Array([description]=>EXAMI[pcchrgamt]=>190.00[pchrgqty]=>1.00[pchrgup]=>190.00)[1]=>Array([description]=>EXAMI[pcchrgamt]=>40.00[pchrgqty]=>1.00[pchrgup]=>40.00)数组()
使用
print\r($rows1);print\r(combineArrayOnKey($rows1,'desc');
你也是!我很高兴听到这有帮助。:)当然。如果(在数组中($kk,['pcchrgamt','pchrgqty,'pchrgup')),甚至更干净一些{ ... }。如果你不关心其他键的值,那么你可以完全跳过
else
。你将保留给定
描述的第一次出现时的值。我想用数字而不是描述对其进行索引。在我的结果中,索引也是空的,让我检查一下:)这很容易处理。我在
array_values()
中点击函数的
return
值,以使用增量键重新索引结果。关于此示例,您应该能够将其粘贴到一个新的
.php
文件中并运行它。是否需要保留原始记录的数字键?我不确定为什么,但我得到了这个
数组([0]=>数组([description]=>EXAMI[pcchrgamt]=>190.00[pchrgqty]=>1.00[pchrgup]=>190.00)[1]=>数组([description]=>EXAMI[pcchrgamt]=>40.00[pchrgqty]=>1.00[pchrgup]=>40.00]数组()
使用
print\r($rows1);print\r(combineArrayOnKey($rows1,'desc'));
你也是!我很高兴听到它有帮助。:)当然。甚至更干净的是:
如果(在数组中($kk,['pcchrgamt','pcchrgqty,'pcchrgup'){…}
。如果不关心其他键的值,则可以完全跳过
else
。无论给定的
描述的第一次出现是什么,都可以保留该值。如果数据始终是完美的,则可以这样做,但是:(1)它不会自动适应新键或不同的数组,因为它是硬编码的,(2) 它不能处理预期的键尚未设置的情况,因此每个新条目都会收到一堆
未定义索引
通知。您可以添加
@
以逃避警告。如果其中一个记录值不是数字,您也会打破小计。正如我所说的,如果条件完美,您的方法会起作用(根据我的经验,这通常是一个不好的假设)。是的,你是对的。我的答案是特定条件的,你的聪明答案更防水。如果数据总是完美的话,这很好,但是:(1)它不会自动适应新的键或不同的阵列,因为它是硬编码的,(2)它不能处理预期的键尚未设置的情况,因此每个新条目都会收到一堆
未定义索引
通知。您可以添加
@
以逃避警告。如果其中一个记录值不是数字,您也会打破小计。正如我所说的,如果条件完美,您的方法会起作用(根据我的经验,这通常是一个不好的假设)。是的,你是对的。我的答案是针对具体情况的,而你聪明的答案更防水。