Php 如何检查多维数组中的值

Php 如何检查多维数组中的值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我的数组在下面 $sample_arr = Array ( [0] => Array ( [index] => 0 [in_id] => 309 [date] => 2016-08-01 [article_Id] => 4 [qty] => 50

我的数组在下面

$sample_arr = Array
    (
        [0] => Array
            (
                [index] => 0
                [in_id] => 309
                [date] => 2016-08-01
                [article_Id] => 4
                [qty] => 50
                [ref] => ref
            )

        [1] => Array
            (
                [index] => 1
                [in_id] => 309
                [date] => 2016-08-01
                [article_Id] => 6
                [qty] => 20
                [ref] => ref 2
            )

        [2] => Array
            (
                [index] => 2
                [in_id] => 309
                [date] => 2016-08-01
                [article_Id] => 6
                [qty] => 21
                [ref] => ref 2
            )

    )
正如您在上面的数组中看到的,数组中有两个article_Id,值为6

我想找到第二行的详细信息,以便我可以使第二行数量为41,即我的结果数组将类似于下面的一个

我尝试了in_数组函数,但仍然缺少一些东西

我也尝试使用foreach,但问题是如何获得第一个外观行数量?i、 e在$sample_arr中,当用户添加第三条记录时,第二行必须更新,如下所示

 $result_arr = Array
        (
            [0] => Array
                (
                    [index] => 0
                    [in_id] => 309
                    [date] => 2016-08-01
                    [article_Id] => 4
                    [qty] => 50
                    [ref] => ref
                )

            [1] => Array
                (
                    [index] => 1
                    [in_id] => 309
                    [date] => 2016-08-01
                    [article_Id] => 6
                    [qty] => 41
                    [ref] => ref goes here
                )

        )
in_array()不适用于多维数组。您可以编写一个递归函数来实现这一点:

function in_array_r($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
            return true;
        }
    }

    return false;
}
用法:

$b = array(array("Mac", "NT"), array("Irix", "Linux"));
echo in_array_r("Irix", $b) ? 'found' : 'not found';

看起来文章ID是唯一的。所以,我们可以将数据存储在$newArray变量中,密钥作为项目ID

每次都会检查是否存在包含项目id的记录。如果是,则添加数量。如果不是,它将附加到$newArray

$newArray = array();

foreach($sample_arr as $arr) {
    if (isset($newArray[$arr['article_Id']])) {
        $newArray[$arr['article_Id']]['qty'] += $arr['qty'];
        $newArray[$arr['article_Id']]['ref'] = 'Ref goes here';  // If this the string that replaces the ref  
    } else {
        $newArray[$arr['article_Id']] = $arr;
    }
}

$newArray = array_values($newArray);
输出:

Array
(
 [0] => Array
    (
        [index] => 0
        [in_id] => 309
        [date] => 2016-08-01
        [article_Id] => 4
        [qty] => 50
        [ref] => ref
    )

 [1] => Array
    (
        [index] => 1
        [in_id] => 309
        [date] => 2016-08-01
        [article_Id] => 6
        [qty] => 41
        [ref] => ref 2
    )

)
请尝试以下操作:

$new_merged_array = array();

if(!empty($sample_arr )){
    foreach($sample_arr  as $sample_ar){
        if(!empty($sample_ar) && isset($sample_ar['article_Id'])){
            if(isset($new_merged_array[$sample_ar['article_Id']])){
                $new_merged_array[$sample_ar['article_Id']]['qty'] += $sample_ar['qty'];
            }else{
                $new_merged_array[$sample_ar['article_Id']] = $sample_ar;
            }
        }
    }
}
print_r($new_merged_array);
输出将是:

Array(
    [4] => Array
        (
            [index] => 0
            [in_id] => 309
            [date] => 2016-08-01
            [article_Id] => 4
            [qty] => 50
            [ref] => ref
        )

    [6] => Array
        (
            [index] => 1
            [in_id] => 309
            [date] => 2016-08-01
            [article_Id] => 6
            [qty] => 41
            [ref] => ref 2
        )
)
Array(
    [0] => Array
        (
            [index] => 0
            [in_id] => 309
            [date] => 2016-08-01
            [article_Id] => 4
            [qty] => 50
            [ref] => ref
        )

    [1] => Array
        (
            [index] => 1
            [in_id] => 309
            [date] => 2016-08-01
            [article_Id] => 6
            [qty] => 41
            [ref] => ref 2
        )
)
另一种方式:

$new_merged_array = $sample_array = array();

if(!empty($sample_arr )){
    foreach($sample_arr  as $sample_ar){
        if(!empty($sample_ar) && isset($sample_ar['article_Id'])){
            if(isset($new_merged_array[$sample_ar['article_Id']])){
                $new_merged_array[$sample_ar['article_Id']]['qty'] += $sample_ar['qty'];
            }else{
                $new_merged_array[$sample_ar['article_Id']] = $sample_ar;
            }
        }
    }
}

if(!empty($new_merged_array )){
    foreach($new_merged_array  as $new_merged_arr){
        $sample_array[] = $new_merged_arr;
    }
}
print_r($sample_array);
输出将是:

Array(
    [4] => Array
        (
            [index] => 0
            [in_id] => 309
            [date] => 2016-08-01
            [article_Id] => 4
            [qty] => 50
            [ref] => ref
        )

    [6] => Array
        (
            [index] => 1
            [in_id] => 309
            [date] => 2016-08-01
            [article_Id] => 6
            [qty] => 41
            [ref] => ref 2
        )
)
Array(
    [0] => Array
        (
            [index] => 0
            [in_id] => 309
            [date] => 2016-08-01
            [article_Id] => 4
            [qty] => 50
            [ref] => ref
        )

    [1] => Array
        (
            [index] => 1
            [in_id] => 309
            [date] => 2016-08-01
            [article_Id] => 6
            [qty] => 41
            [ref] => ref 2
        )
)


问题不太清楚//article\u Id是唯一的是article\u Id是唯一的。当我们再次添加相同的文章Id时,必须更新第一条记录的数量为您的努力干杯。但我在两分钟前从对象操纵器那里得到了答案。谢谢:-)magizhchi感谢您的努力。但我在几分钟前从物体操纵器那里得到了答案。மகிழ்ச்சி :) @普里西