简体   繁体   中英

Create a custom array in php which contain datas from mysql database

I can't find the solution of my problem, I would like to create an array which contains data from 2 different tables from my database.

So first I get those data by doing:

            $customArray = [];
            $arrayTicket = [];
            $sqlTicket = "SELECT * FROM ticket";
            foreach ($conn->query($sqlTicket) as $datas) {

                $arrayTicket[] = $datas;
            }


            $myarray = [];
            $sqlUsers = "SELECT * FROM organisation";
            foreach ($conn->query($sqlUsers) as $data) {

                $myarray[] = $data;
            }

Then I try to push those data in one array:

           foreach ($myarray as $keys => $values) {

            foreach ($arrayTicket as $key => $value) {



                if($arrayTicket[$key]["organisation_id"] == $myarray[$keys]["id_orga"]){



                    $customArray[$keys] = $values;
                    $customArray[$keys]["tickets"][] = $value;


                }
            }
        }
        echo '<pre>';
        print_r($customArray);  
        echo '</pre>';      
    }

And finally the problem is that I get only one Ticket and I should get many tickets with key [0],[1],[2]:

Array
(
    [1] => Array
        (
            [id] => 2
            [id_orga] => 37520251
            [nom] => Agricole
            [url] => https://cubber.zendesk.com/api/v2/organizations/37520251.json
            [created] => 2015-01-22 07:59:13
            [updated] => 2015-01-22 07:59:13
            [tickets] => Array
                (
                    [0] => Array
                        (
                            [id] => 2291
                            [t_user_id] => 2401621445
                            [id_ticket] => 7280
                            [tags] => pole_basegi
                            [titre] => LDM par Marque / AGP-AUFICOM
                            [date_ouvert] => 2016-07-05 17:20:41
                            [date_resolv] => 2016-07-06 07:18:16
                            [statut] => pending
                            [comment] => Sur les dossiers de RAMBERVILLERS, Commercial / Lettre de Mission / Par Marque => message : " La marque AGP-AUFICOM n'a pas de modèle de lettre de mission"
                            [custom_field] => 
                            [organisation_id] => 37520251
                        )

                )

        )

I would like to get an array like that with every tickets from the organisation in the key [tickets]:

 Array
    (
        [1] => Array
            (
                [id] => 2
                [id_orga] => 37520251
                [nom] => Agricole
                [url] => https://cubber.zendesk.com/api/v2/organizations/37520251.json
                [created] => 2015-01-22 07:59:13
                [updated] => 2015-01-22 07:59:13
                [tickets] => Array
                    (
                        [0] => Array
                            (
                                [id] => 2291
                                [t_user_id] => 2401621445
                                [id_ticket] => 7280
                                [tags] => pole_basegi
                                [titre] => LDM par Marque / AGP-AUFICOM
                                [date_ouvert] => 2016-07-05 17:20:41
                                [date_resolv] => 2016-07-06 07:18:16
                                [statut] => pending
                                [comment] => Sur les dossiers de 
                                [custom_field] => 
                                [organisation_id] => 37520251
                            )
                 [1] => Array
                        (
                            [id] => 2292
                            [t_user_id] => 594578401
                            [id_ticket] => 7281
                            [tags] => maintenance
                            [titre] => probleme recup donnée bancaire
                            [date_ouvert] => 2016-07-06 06:33:53
                            [date_resolv] => 2016-07-06 07:44:17
                            [statut] => solved
                            [comment] => Bonjour,
                            [custom_field] => 20
                            [organisation_id] => 34304612
                        )


                    )

            )

You're being very inefficient by loading entire MySQL tables in memory just so you can do work with a fraction of them. You're much better off learning how to build SQL queries that get you exactly what you need

SELECT * FROM organisation AS t
LEFT JOIN ticket AS t2
ON t.`id_orga` = t2.`organisation_id`

This query will join the tables into one table; the rows will be matched by the organization's id. It will be much easier to work with.

One other problem I see in your code. Consider the following lines:

$customArray[$keys] = $values;
$customArray[$keys]["tickets"][] = $value;

First off, it's a big problem that you're not using intuitive names for your variables. It increases the likelihood of bugs, and makes code difficult to understand: $customArray , $myArray , $value , $values don't give any indication of what they represent! Names such as $row_organisation , $row_ticket , $key_organization and $key_ticket would be better.

One problem with these lines though is that you keep overwriting the work you've already done. $customArray[$keys] is set to the same $values many times since $values comes from the outer loop.

My advice. Start over, with a proper SQL query that gets you only what you need.

I recommend using an SQL JOIN but if you insist on merging the two arrays please use this:

$customArray = [];

foreach($myarray as $keys => $values) {

    $customArray[$keys] = $values;
    $customArray[$keys]["tickets"] = [];

    foreach($arrayTicket as $key => $value) {

        if ($arrayTicket[$key]["organisation_id"] == $myarray[$keys]["id_orga"]) {

            $customArray[$keys]["tickets"][] = $value;

        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM