Tengo una matriz multidimensional de 10000 filas, y cada fila es así:
^ array:n [▼
"static1" => "<HMI screen>"
"static2" => "Testo ON"
"static3" => "s+W+OzXRzgfKrp3VB ▶"
"static4" => ""
"dynamic1" => "foo"
"dynamic2" => "bar"
"dynamic3" => "baz"
"static5" => null
"static6" => null
"static7" => null
"static8" => null
"static9" => null
"static10" => null
...
]
Necesito verificar los primeros datos dinámicos y, en algunas condiciones, necesito copiar el valor en la clave dinámica 1, en todas las demás claves dinámicas.
Durante la iteración de la matriz grande, en algunos casos hago algo como esto:
$page[$i] = $row;
$value = $row[$dynamic1];
foreach($dynamicKeys as $key){
$page[$i][$key] = $value;
}
Así que sobrescribo todos los valores de clave dinámica con el primer valor de clave dinámica.
En $dynamicsKey tengo todos los valores de las claves de las claves dinámicas excepto la primera, ejemplo:
$dynamicKeys = ['dynamic2','dynamic3'..];
Existe una función PHP nativa para hacer esto:
$value = $page[$i]['dynamic1']; (in most case non everytime)
$page[$i] = magicNativePHPFunction($value,$dynamicKeys);
y el resultado debe ser:
^ array:n [▼
"static1" => "<HMI screen>"
"static2" => "Testo ON"
"static3" => "s+W+OzXRzgfKrp3VB ▶"
"static4" => ""
"dynamic1" => "foo"
"dynamic2" => "foo"
"dynamic3" => "foo"
"static5" => null
"static6" => null
"static7" => null
"static8" => null
"static9" => null
"static10" => null
...
]
Solución del problema
Si necesita una solución de una sola línea, intente esto,
$inputArr = [
// other static keys
"static2" => "Testo ON",
"dynamic1" => "foo",
"dynamic2" => "bar",
"dynamic3" => "baz"
// other static keys
];
$dynamic1 = $inputArr["dynamic1"];
$dynamicKeys = ['dynamic2','dynamic3'];
// Maybe this is the line that you are looking for
$outputArr = array_replace($inputArr, array_fill_keys($dynamicKeys, $dynamic1));
print_r($outputArr);
El resultado será,
Array
(
// other static keys
[static2] => Testo ON
[dynamic1] => foo
[dynamic2] => foo
[dynamic3] => foo
// other static keys
)
No hay comentarios.:
Publicar un comentario