Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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(4) { [0]=> array(2) { ["id"]=> string(4) "id-1" ["articles"]=> array(2) { [0]=> array(1) { ["data"]=> array(6) { ["art"]=> string(6) "108108"

以下是我的阵列示例:

array(4) {
  [0]=>
  array(2) {
    ["id"]=>
    string(4) "id-1"
    ["articles"]=>
    array(2) {
      [0]=>
      array(1) {
        ["data"]=>
        array(6) {
          ["art"]=>
          string(6) "108108"
          ["type"]=>
          string(0) ""
          ["pos"]=>
          string(3) "125"
          ["kleur"]=>
          string(4) "3750"
          ["height"]=>
          string(3) "179"
          ["foto"]=>
          string(2) "01"
        }
      }
      [1]=>
      array(1) {
        ["data"]=>
        array(6) {
          ["art"]=>
          string(0) ""
          ["type"]=>
          string(0) ""
          ["pos"]=>
          string(3) "163"
          ["kleur"]=>
          string(0) ""
          ["height"]=>
          string(0) ""
          ["foto"]=>
          string(0) ""
        }
      }
    }
  }
  [2]=>
  array(2) {
    ["id"]=>
    string(7) "ui-id-2"
    ["articles"]=>
    array(2) {
      [0]=>
      array(1) {
        ["data"]=>
        array(6) {
          ["art"]=>
          string(0) ""
          ["type"]=>
          string(0) ""
          ["pos"]=>
          string(3) "944"
          ["kleur"]=>
          string(0) ""
          ["height"]=>
          string(0) ""
          ["foto"]=>
          string(0) ""
        }
      }
      [1]=>
      array(1) {
        ["data"]=>
        array(6) {
          ["art"]=>
          string(0) ""
          ["type"]=>
          string(0) ""
          ["pos"]=>
          string(3) "586"
          ["kleur"]=>
          string(0) ""
          ["height"]=>
          string(0) ""
          ["foto"]=>
          string(0) ""
        }
      }
    }
  }
}
例如,我想更改
art
的值,其中
id
id-1
,而
pos
163

我开始了,但被困在某个很深的地方

foreach($data as $key => $value) {
    if($value['id'] === "id-1") {
        foreach($value as $tweek => $tweev) {
            foreach($tweev as $driek => $driev) {
                foreach($driev as $vierk => $vierv) {
                    if($vierv['pos'] === "163") {
                        // This is the right article! I think...
                        echo $vierv['pos'] . "<br />"; // shows 163!
                        foreach($vierv as $vijfk => $vijfv) {
                            // What to do?!?!
                        }
                    }
                }
            }
        }
    }
}
foreach($key=>$value形式的数据){
如果($value['id']=“id-1”){
foreach(价值为$tweek=>$tweev){
foreach($tweev作为$driek=>$driev){
foreach($driev作为$vierk=>$vierv){
如果($vierv['pos']=“163”){
//这是正确的文章!我认为。。。
echo$vierv['pos']。“
”;//显示163! foreach($vierv作为$vijfk=>$vijfv){ //怎么办?!?! } } } } } } }

我走对了吗?下一步是什么?有人能给我指出正确的方向吗?

当你开始处理嵌套如此深的数组时,你真的应该使用对象。但是,如果没有其他选择,可以创建一个递归函数,返回第n级的子数组,其中包含一些参数,用于控制要达到的深度

类似于的东西可能是?

在PHP中使用array\u recursive()


定义此数组的方式很难看到发生了什么。你可以这样写:

arr = array(
  0=>array(
     'id'=>"id-1",
     'articles'=> array(
        0=>array(
           'data'=> array(
              'art'=> "108108"
              'type'=> ""
              'pos'=> "125"
              'kleur'=> "3750"
              'height'=> "179"
              'foto'=> "01"
              ),
           ),


        1=> array(
            'data'=> array(
               'art'=> ""
               'type'=> ""
               'pos'=> "163"
               'kleur'=> ""
               'height'=> ""
               'foto'=> ""
               ),
            ),
      ),
     ),
  2=> array(
    'id'=>"ui-id-2"
    'articles'=> array(
       0=> array(
           'data'=> array(
              'art'=> ""
              'type'=> ""
              'pos'=> "944"
              'kleur'=> ""
              'height'=> ""
              'foto'=> ""
              ),
           ),
       1=> array(
           'data'=> array(
              'art'=> ""
              'type'=> ""
              'pos'=> "586"
              'kleur'=> ""
              'height'=> ""
              'foto'=> ""
              ),
           ),
       ),
    ),
  );
foreach ($arr as $key=>value) 
   if ($value['id'] == 'id-1')
      foreach($value as $key2=>$value2)
         if ($value2['pos'] == 163)
             $value2['art'] = $newArtValue;
例如,通过这种方式,您可以看到“data”数组引入了一个超流嵌套级别。回答您的问题:您可以访问多维数组中的元素,如下所示:

arr = array(
  0=>array(
     'id'=>"id-1",
     'articles'=> array(
        0=>array(
           'data'=> array(
              'art'=> "108108"
              'type'=> ""
              'pos'=> "125"
              'kleur'=> "3750"
              'height'=> "179"
              'foto'=> "01"
              ),
           ),


        1=> array(
            'data'=> array(
               'art'=> ""
               'type'=> ""
               'pos'=> "163"
               'kleur'=> ""
               'height'=> ""
               'foto'=> ""
               ),
            ),
      ),
     ),
  2=> array(
    'id'=>"ui-id-2"
    'articles'=> array(
       0=> array(
           'data'=> array(
              'art'=> ""
              'type'=> ""
              'pos'=> "944"
              'kleur'=> ""
              'height'=> ""
              'foto'=> ""
              ),
           ),
       1=> array(
           'data'=> array(
              'art'=> ""
              'type'=> ""
              'pos'=> "586"
              'kleur'=> ""
              'height'=> ""
              'foto'=> ""
              ),
           ),
       ),
    ),
  );
foreach ($arr as $key=>value) 
   if ($value['id'] == 'id-1')
      foreach($value as $key2=>$value2)
         if ($value2['pos'] == 163)
             $value2['art'] = $newArtValue;
我同意你的意见,你应该改变你的结构。对于此循环,使用“id”和“pos”值作为键将使迭代变得不必要:

因此,如果您这样编写数组(不丢失任何信息):

按要求更改值非常简单,如下所示:

$arr['id-1'][163]['art'] = $newArtValue;

当您开始处理嵌套非常深的数组时,应该真正使用对象。如果你别无选择,只能使用数组,你可以创建一个递归函数,返回第n级的子数组,其中包含一些参数,可以让你控制你想要的深度。这个数组有5级深:这清楚地表明你做错了什么。使用这种结构,您将能够获得工作正常但最糟糕的代码。您应该更改结构。
var\u dump()->var\u export()
这应该有助于维护较短的代码。