访问和覆盖2d数组值

时间:2016-01-18 04:05:16

标签: php arrays multidimensional-array

我的问题是,我有一个2D Array,我希望override设置的元素的值。

我的代码如下:

$indes="-1";
$inupccode="-1";
$inuomcode="-1";
$instdpack="-1";
$inweight="-1";
$inlength="-1";
$inwidth="-1";
$inheight="-1";
$inunitprice="-1";
$infamcode="-1";

$basicInfo = array(array($indes,"prdes1_35", $inupccode,
                        "prupc#_2", $inuomcode,"prwuts_3-1",
                        $instdpack,"prwuns_12", $inweight,
                        "prgrwt_11", $inlength,"prlong_7",
                         $inwidth,"prwide_7", $inheight,"prhigh_7", 
                         $inunitprice,"prprce_12", $infamcode,"proga2"));
echo "before";
print_r($basicInfo); 

foreach($basicInfo as $value){
    foreach ($value as $id){
        if($id == "prdes1_35"){
            $value = 2;
        }
    }
}
echo "after";
print_r($basicInfo); 

$indes的值代码中,我想从-1 to 2更改,并且提醒数组值必须保留为“-1”。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

最大的问题首先:我不认为你的代码符合你的意图。你确定你理解(多维)数组吗?

另一个问题是您尝试更改$value的方式。请查看这篇文章:

(https://stackoverflow.com/questions/15024616/php-foreach-change-original-array-values)

有关如何更改使用foreach运行的数组的信息。

最简单的解决方案是:

foreach($basicInfo as &$value){
    foreach ($value as $id){
        if($id == "prdes1_35"){
            $value = 2;
        }
    }
}

在$ value变量之前注意&符号(&)。引用的帖子中的链接包含了解其含义所必需的所有解释。

Perfomancewise这将是最好的解决方案,特别是当您的阵列变大时:

foreach($basicInfo as $key => $value){
        foreach ($value as $id){
            if($id == "prdes1_35"){
                $basicInfo[$key][$value] = 2;
            }
        }
    }

注意:我没有改变你的代码逻辑(我认为这是坏的)。我刚刚演示了如何在使用foreach迭代数组时更改值。