Stack Overflow en español Asked by Gerardo Rios on December 2, 2021
necesito acceder al valor almacenado en [01A] como puedo recorrer el arreglo para poder llegar a ese valor? (PHP)
Array
(
[0] => Array
(
[precio] => 500
[moneda] => USD
[almacenes] => Array
(
[0] => Array
(
[01A] => 3
)
)
[codigo] => ACCACR130
)
Trata de reconocer cada elemento, de forma que puedas visualizarlo antes de tratar de acceder:
$productos
es un arreglo donde cada elemento es otro arreglo$productos = [
[
'precio' => '500',
'moneda' => 'USD',
'almacenes' => [
['01A' => 3],
['02B' => 3],
],
'codigo' => 'ACCACR130',
],
[
'precio' => '750',
'moneda' => 'MXN',
'almacenes' => [
['01A' => 5],
['02B' => 3],
],
'codigo' => 'ACCACR750',
],
];
// Recorres el array productos
foreach($productos as $producto) {
$codigo = $producto['codigo'];
// Dentro de cada producto, recorres almacenes
foreach($producto['almacenes'] as $almacen) {
// Cada almacén es un arreglo con solo un elemento clave => valor
if(isset($almacen['01A'])) {
$cantidad = $almacen['01A'];
echo "<p>$codigo encontrado en 01A con $cantidad</p>";
}
}
}
Si puedes simplificar la estructura de almacenes para guardar solo clave y valor por cada almacén, el código se reduce y solo necesitas un ciclo para recorrer productos:
$productos = [
[
'precio' => '500',
'moneda' => 'USD',
'almacenes' => [
'01A' => 3,
'02B' => 3,
],
'codigo' => 'ACCACR130',
],
[
'precio' => '750',
'moneda' => 'MXN',
'almacenes' => [
'01A' => 5,
'02B' => 3,
],
'codigo' => 'ACCACR750',
],
];
// Recorres el array productos
foreach($productos as $producto) {
$codigo = $producto['codigo'];
// Dentro de cada producto, buscas directamente '01A' en almacenes
if(isset($producto['almacenes']['01A'])) {
$cantidad = $producto['almacenes']['01A'];
echo "<p>$codigo encontrado en 01A con $cantidad</p>";
}
}
Answered by Triby on December 2, 2021
Podrias usar una funcion recursiva, mas o menos asi:
$arreglo = [
[
'precio' => '500',
'moneda' => 'USD',
'almacenes' => [['01A' => 3]],
'codigo' => 'ACCACR130',
]
];
function search($array, $search)
{
foreach($array as $key => $value){
if(is_array($value)){
search($value,$search);
}
elseif($key === $search){
echo $value;
}
}
}
$buscar = "01A";
search($arreglo, $buscar);
Explicacion: A la funcion le pasas dos parametros, el arreglo array
y la busqueda search
. Primero si la llave key
es un arreglo, entonces vuelves a llamar a la funcion que vuelve a ejecutar el foreach
dentro de el subarreglo y asi sucesivamente hasta que no encuentre un arreglo. En ese momento, la funcion comparara la llave y si es igual a la busqueda, entonces te imprimira el valor de esa llave $value
.
La salida del codigo de arriba es : 3
.
Pero nota que si camibas el valor de la variable $buscar
a codigo
por ejemplo te va a dar el valor de codigo que es ACCACR130
.
Nota que esto funciona solamente cuando la busqueda es exactamente igual a la llave y cuando la llave es de tipo string
. Si por ejemplo le pones a la busqueda almacenes
esto no va a hacer nada por que el valor de almacenes
es un arreglo por lo que en teoria esto llamaria otra vez a la funcion misma y nunca seria igual a la busqueda que es de tipo string
Answered by xelfury on December 2, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP