Pregunta:
Fecha: 04-04-2018 22:53:38
(En Español)
Veran lo que tengo es lo siguiente.
Tengo este arreglo:
Votos: 0 - Respuestas: 1 - Vistas: 9 Compartir en: Google Facebook Twitter LinkedIn Link
Ayuda! con suma de arreglos [No resuelta]
Hola developers, estoy estudiando el uso de arreglos en php y me he trabado un poco intentando hacer unas operaciones con estos elementos.Veran lo que tengo es lo siguiente.
Tengo este arreglo:
$nuevo_a = array(
array("id"=>"TT9847OP-8","cargo"=>"panadero","htrabajadas"=>"10", "diaL"=>"lunes"),
array("id"=>"TT5447KP-1","cargo"=>"auxiliar1","htrabajadas"=>"2", "diaL"=>"lunes"),
array("id"=>"TT5447KP-1","cargo"=>"auxiliar1","htrabajadas"=>"4", "diaL"=>"martes"),
array("id"=>"TT001JW-2","cargo"=>"auxiliar1","htrabajadas"=>"8", "diaL"=>"lunes")
);
//estoy intentando hacer una función así:
//el valor de $cargo debe extraerse de $nuevo_a, campo "cargo" y $horasT debe extraerse de $nuevo_a campo "diaL"
function calcular ($array1, $cargo, $horasT) {
$new_arr = array(); //arrays que utilizaré para crear otro array al final
$new_Sub_Arr = array();
//me gustaria trabajar el array introducido como parametro1, sumando en cada campo con llave "htrabajador" sus valores, siempre y cuando los dias laborales (campo con llave "diaL") cambien. Al final el array $nuevo_a debe actualizarse con los nuevos valores derivados de las sumas y mostrarse en pantalla (esto lo se hace por medio de foreach y for()). Pero no se bien cómo hacer lo principal que son las sumas. No se si se entiende la idea.
//aqui muestro el nuevo array actualizado.
}
calcular ($nuevo_a, $cargo, $horasT);Votos: 0 - Respuestas: 1 - Vistas: 9 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 04-04-2018 23:48:39 En realidad no se que pasas en las otras variables porque en tu ejemplo no aparece nada, yo haría algo como esto, quizá se pueda más optimizado, pero es lo que se me ocurre a esta hora:
$nuevo_a = array( array("id"=>"TT9847OP-8","cargo"=>"panadero","htrabajadas"=>"10", "diaL"=>"lunes"), array("id"=>"TT5447KP-1","cargo"=>"auxiliar1","htrabajadas"=>"2", "diaL"=>"lunes"), array("id"=>"TT5447KP-1","cargo"=>"auxiliar1","htrabajadas"=>"4", "diaL"=>"martes"), array("id"=>"TT001JW-2","cargo"=>"auxiliar1","htrabajadas"=>"8", "diaL"=>"lunes") ); function calcular ($data) { //Se inicializa el array de salida $new_arr = array(); //Recorro los elementos del arreglo foreach($data as $item){ //Verifico si la clave se encuentra en el array de salida if(array_key_exists($item['id'],$new_arr)){ //Si está, verifico que el dñia no se haya verificado ya if(!in_array($item['diaL'], $new_arr[$item['id']]['dias'])){ //Si no esta verificado el día, sumo las horas con las ya agregadas si las hay $new_arr[$item['id']]['horas'] = $new_arr[$item['id']]['horas'] + $item['htrabajadas']; //Agrego el día verificado al sub array array_push($new_arr[$item['id']]['dias'],$item['diaL']); } }else{ //Si la clave no existe, la agrego $new_arr[$item['id']] = array('dias'=>array($item['diaL']),'horas'=>$item['htrabajadas']); } } //Retorno el array return $new_arr; } var_dump(calcular ($nuevo_a));
Eso retorna un array así:
array( "TT9847OP-8" => array( "dias" => array("lunes" ), "horas"=> "10" ), "TT5447KP-1"=> array( "dias"=> array("lunes","martes" ), "horas"=> "6" ), "TT001JW-2"=> array( "dias"=> array("lunes"), "horas"=> "8" ) )
de todas formas creo que es mejor con fecha que con día de la semana, pues si trabaje 3 lunes en un mes, el sistema no me va a tomar los otros dos lunes luego de verificado el primero.
espero te sirva Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
