Nueva pregunta

Pregunta:

Fecha: 04-04-2018 22:53:38 (En Español)

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);


Etiquetas: Array PHP - PHP - Pregunta - Script PHP 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
 
frjcbbae garagebible.com