2 votes

Créer un nouveau tableau à partir de foreach dans CodeIgniter

Je suis un noob total de CodeIgniter. J'essaie de mettre à jour quelques éléments de la base de données à partir d'une boucle foreach.

foreach($transfer_lists as $lists) {
   $this->db->from('tasks');
   $this->db->where('task_list_id', $lists['list_id']);
   $transfer_lists_check=$this->db->get()->result_array();      

   $transfer_new = array_shift($transfer_lists_check);

   $new_array = array(
      'task_id'           => $transfer_new['task_id'],
      'task_project_id'   => $new_project_id
   );
}

$this->db->update_batch('tasks', $new_array, 'task_list_id'); 

Mon tableau nouvellement créé ne renvoie qu'un seul élément du tableau. Il devrait renvoyer 3 éléments, car c'est le nombre d'éléments que contient la base de données avec cet identifiant de liste spécifique.

Comme vous pouvez le voir dans le code, j'essaie de mettre à jour par lots des tâches spécifiques avec un $project_id prédéfini, c'est pourquoi j'ai besoin d'un tableau.

Je me tape la tête contre le mur en essayant de trouver une solution, mais je n'ai pas encore trouvé quelque chose de similaire dans Stack, ou simplement je ne sais pas comment chercher :/

MISE À JOUR

Après avoir conversé avec @akshay-hedge ci-dessous, je me suis rendu compte que j'essayais d'obtenir 3 résultats dans une boucle 'foreach' avec 1 référence.

Solution : Inclure un autre "foreach" dans un "foreach" pour construire mon tableau selon les besoins.

Code mis à jour ci-dessous :

foreach($transfer_lists as $lists) {
   $this->db->from('tasks');
   $this->db->where('task_list_id', $lists['list_id']);
   $tasks_found=$this->db->get()->result_array();       

        // Solution to get the desired Array I was looking for
        foreach($tasks_found as $tasks) {
            $new_array[] = array(
                'task_id'           => $tasks['task_id'],
                'task_project_id'   => $new_project_id
            );
        }

}

$this->db->update_batch('tasks', $new_array, 'task_list_id'); 

MISE À JOUR 2

Après quelques échanges, @akshay-hedge a suggéré une autre solution sans utiliser de 'foreach', en construisant un tableau à partir de 'task_list_id', que j'ai initialement.

Veuillez consulter la réponse acceptée ci-dessous pour obtenir la solution.

1voto

Akshay Hegde Points 12930

Vous avez un petit problème à régler :

$new_array = array( .. ) - Avec cette méthode, vous écrasez le tableau à chaque itération.

$new_array[] = array( .. ) - avec cette méthode, vous ajoutez un nouvel élément au tableau ( $new_array ) à chaque itération.

Modifiez donc votre code

De

 $new_array = array(
      'task_id'           => $transfer_new['task_id'],
      'task_project_id'   => $new_project_id
   );

POUR

 $new_array[] = array(
      'task_id'           => $transfer_new['task_id'],
      'task_project_id'   => $new_project_id
   );

Puisque vous avez obtenu la liste des list_ids vous pouvez utiliser where_in

$new_array = $this->db->select("'$new_project_id' as task_project_id,task_id",FALSE)
->where_in('task_list_id', array_column($transfer_lists,'list_id'))
->from('tasks')
->get()
->result_array();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X