php for anousous behavior设置for循环中的属性

问题描述 投票:0回答:1

我有一个像这样生成的数组:

array:7 [▼
  1 => array:5 [▼
    0 => array:2 [▼
      0 => Receta {#140 ▶}
      1 => Receta {#71 ▶}
    ]
    1 => array:2 [▶]
    2 => array:4 [▶]
    3 => array:2 [▶]
    4 => array:4 [▶]
  ]
  2 => array:5 [▶]
  3 => array:5 [▶]
  4 => array:5 [▶]
  5 => array:5 [▶]
  6 => array:5 [▶]
  7 => array:5 [▶]
]

最后,我们可以找到一个名为'marca'的对象(Receta);然后我遍历数组并在控制器中设置属性,如下所示:

public function calculoPersonalizadoAction()
{
    $sesion = $this->get('session');
    $em = $this->getDoctrine()->getManager();


    /* GENERATE ARRAY */
    $estructura = new GeneradorDeEstructuraMenu($this->container, $sesion->get('valorId0'));
    $datosEstructurados = $estructura->ordenarEstructurasPorTipos();  

    $menuEstructurado = new EstructuradorDeMenus($sesion->get('recetas'), $datosEstructurados);   
    $recetasEstructuradas = $menuEstructurado->sustituirEnArrayEstructura(); // THIS IS THE ARRAY GENERATED WHAT I WANT TO TRAVERSE

    /* TRAVERSE ARRAY */
    for ($i=1; $i<=count($recetasEstructuradas); $i++){
        for ($n=0; $n<=count($recetasEstructuradas[$i])-1;$n++){
            for ($t=0; $t<=count($recetasEstructuradas[$i][$n])-1;$t++){

            $recetasEstructuradas[$i][$n][$t]->setMarca($i.$n.$t); 
            dump($recetasEstructuradas);
            }
        }
    }
    return $this->render('ComponentesBundle:GeneraMenu:calculoPersonalizado.html.twig', array(
        'recetasEstructuradas'=>$recetasEstructuradas,
    ));
}   

所以,我尝试得到这样的数组:

array:7 [▼
  1 => array:5 [▼
    0 => array:2 [▼
      0 => Receta {#140 ▼
        -...
        -marca: "100"
      }
      1 => Receta {#71 ▼
        -...
        -marca: "101"
      }
    ]
    1 => array:2 [▼
      0 => Receta {#42 ▼
        -...
        -marca: "110"
      }
      1 => Receta {#71 ▶}
    ]
    2 => array:4 [▶]
    3 => array:2 [▶]
    4 => array:4 [▶]
  ]
  2 => array:5 [▶]
  3 => array:5 [▶]
  4 => array:5 [▶]
  5 => array:5 [▶]
  6 => array:5 [▶]
  7 => array:5 [▶]
]   

但最后,我得到了一个像这样的数组:

array:7 [▼
  1 => array:5 [▼
    0 => array:2 [▼
      0 => Receta {#140 ▼
        -...
        -marca: "730"
      }
      1 => Receta {#71 ▼
        -...
        -marca: "731"
      }
    ]
    1 => array:2 [▼
      0 => Receta {#42 ▼
        -...
        -marca: "710"
      }
      1 => Receta {#71 ▶}
    ]
    2 => array:4 [▶]
    3 => array:2 [▶]
    4 => array:4 [▶]
  ]
  2 => array:5 [▶]
  3 => array:5 [▶]
  4 => array:5 [▶]
  5 => array:5 [▶]
  6 => array:5 [▶]
  7 => array:5 [▶]
]

注意位置[7] [3] [0]中的对象在位置[1] [0] [1]中的对象上是相同的,我想当遍历数组并到达[7] [ 3] [0],它覆盖以前的相同对象。我不确定为什么这会发生在循环内部以及当我设置属性时我做错了什么。谢谢你的回复。

symfony for-loop setter
1个回答
1
投票

重复的对象似乎是同一个对象(查看哈希和数字标记,例如#71),因此它们通过引用传递:

 1 => Receta {#71 ▼
    -...
    -marca: "101"
  }
]
1 => array:2 [▼
  0 => Receta {#42 ▼
    -...
    -marca: "110"
  }
  1 => Receta {#71 ▶}
]

确保您在new Receta类中使用EstructuradorDeMenus

© www.soinside.com 2019 - 2024. All rights reserved.