Search code examples
phpcodeigniter-4gojs

PHP Array Relation


enter image description here

I want to make a binary tree by connecting the REV column with the KEY column with ROOT KEY = 2 and delete the arrays that are not related to KEY 2. Thank you

enter image description here

I want to change the root tree to the image in the blue box, and delete all data that is not related to the data in the blue box.

i have this code for all result data, how to filter data only showing KEY=2 as root

function get_rev() {
    $id =  session()->get('user')['id'];
    $Array = model('AppModel', false)->setTable('mp_members')
            ->select('id as key, reveral as rev, name, address, picture, level')
            ->where('reveral !=', '-')
            ->get()->getResultArray();
            
    //dd($Array);
    return $Array;
}

The following is the data array of all results

[{"key":"1","rev":"2","name":"JUNO MARPAUNG","address":"JL. SISINGAMANGARAJA NO. 37 YOGYAKARTA , DAERAH ISTIMEWA YOGYAKARTA","picture":"default.jpg","level":"1"},{"key":"2","rev":"6","name":"EDDY PROYEKSI PT.","address":"GEDUNG STC SENAYAN LANTAI 2 RUANG 89 JL.ASIA AFRIKA PINTU IX GELORA SENAYAN, Kel. Gelora, Kec. Tanah Abang, Kota Adm. Jakarta Pusat, Prop. DKI Jakart","picture":"1688217815_1ddffa097a9bb623c213.png","level":"1"},{"key":"3","rev":"12","name":" HENKEL INDONESIEN ,PTNOM","address":"NISSI BINTARO CAMPUS LANTAI 3JL. TEGAL ROTAN RAYA NO.78KEL. SAWAH BARU, KEC. TANGERANGBANTEN","picture":"default.jpg","level":"3"},{"key":"4","rev":"1","name":" IFB INDONESIA, PTNOM","address":"SENTRA BISNIS ARTHA GADING BLOK A7-D NO.10JL. BOULEVARD ARTHA GADING, JAKARTA UTARAON BEHALF IFL INTERNATIONAL FREIGHT LINES LIMITED","picture":"default.jpg","level":"3"},{"key":"5","rev":"2","name":" METRO PEARL INDONESIA O\/B GLOBALINK WORLDWIDE LTD","address":"JLN. PRAMUKA RAYA NO.18 KM 0.99DS. BUNDER KEC.JATILUHUR - PURWAKARTAJAWA BARAT - INDONESIA","picture":"default.jpg","level":"3"},{"key":"6","rev":"6","name":" PRIMAHOTEL MANAJEMEN INDONESIA.PT","address":"JL. GUNUNG SAHARI RAYA RUKO MARINATAMA BLOKA NO.26-27 JAKARTA UTARA 14420","picture":"default.jpg","level":"3"},{"key":"7","rev":"5","name":" TPIL LOGISTICS ,PT","address":"JL. CUMI NO. 31 RT.004 RW.008 TANJUNG PRIOK JAKARTA UTARA,DKI JAKARTA - 14310INDONESIATAX ID: 01.967.361.5-046.000","picture":"default.jpg","level":"3"},{"key":"8","rev":"5","name":" UNGARAN SARI GARMENTS PTNOM","address":"JL. P. DIPONEGORO NO.235. P.O.BOX 108GENUK UNGARAN BARAT, SEMARANG,JAWA TENGAH 50512, INDONESIA","picture":"default.jpg","level":"3"},{"key":"9","rev":"12","name":"100 PERCENT CONCEPT ASIA-PACIFIC LTD","address":"OFFICE TOWER, ITC CEMPAKA MAS 7TH FLOOR, ROOM #15BJL. LET JEND. SOEPRAPTO JAKARTAINDONESIA - 10640","picture":"default.jpg","level":"3"},{"key":"10","rev":"13","name":"3S PRIME CONTINENTAL - 3SPC CARGO, PT.","address":"INTERNATIONAL FREIGHT FORWARDERPHONE: +62 21 5436 0108FAX: +62 21 544 7483","picture":"default.jpg","level":"2"},{"key":"11","rev":"1","name":"3S PRIME CONTINENTAL PTNOM","address":"RUKO DUTA INDAH ALPHA B-3JL. PETA SELATAN - KALIDERES, JAKARTA BARAT 11840TEL: +6221-54360108TAX ID: 03.017.325.6-085.000","picture":"default.jpg","level":"3"},{"key":"12","rev":"13","name":"4EVER TRANSINDO PTNOM","address":"JL.JATIWARINGIN RAYA NO24 BLK.MRT.8 CIPINANG JAKARTA ID 13620TELP\/FAX: (62-21)29474874\/29474873TAX ID NO.:03.257.404.8.005.000","picture":"default.jpg","level":"3"},{"key":"13","rev":"6","name":"7SEAS LOGISTICS GROUP LIMITED","address":"MENARA KUNINGAN, LEVEL 30JL.HR RASUNA SAID BLOK X-7 KAV.5KARET KUNINGANSOUTH JAKARTA 12940. INDONESIATEL.: (021) 29553679 FAX.: (021) 29553678","picture":"default.jpg","level":"3"},{"key":"15","rev":"11","name":"A.W. FABER-CASTELL INDONESIA, PT.","address":"JL. RAYA NAROGONG, PANGKALAN IBBANTAR GEBANG, BEKASI INDONESIA","picture":"default.jpg","level":"3"},{"key":"16","rev":"7","name":"ABADI PERKASA SUKSES LOGISTIK,PT","address":"JALAN OTISTA RAYA NO. 458 CAWANGJAKARTA TIMUR 13330 - INDONESIA","picture":"default.jpg","level":"3"},{"key":"17","rev":"7","name":"ABD SEJAHTERA, CV.","address":"JL. GANG BLOK KARANG DEWA RT.011\/RW.003DESA MAYUNG, KEC. GUNUNG JATI, KAB. CIREBON","picture":"default.jpg","level":"3"},{"key":"18","rev":"8","name":"ABR LOGISTIK INDONESIA, PT","address":"JALAN SENTRA BISNIS ARTHA GADING BLOK A7C NO.28KELAPA GADING BARAT,KELAPA GADINGJAKARTA UTARA 14240,INDONESIATEL : +62 21 4587 8932 FAX : +62 21 45","picture":"default.jpg","level":"3"},{"key":"19","rev":"8","name":"ACC EXPRESS,PT","address":"PHONE : 021 2903 2488","picture":"default.jpg","level":"3"},{"key":"20","rev":"11","name":"ACE INTERNASIONAL LOGISTIKS, PT.","address":"JL ARTERI MANGGA DUA RAYA, GBC- D\"15, JAKARTA - 14430, INDONESIAPH: +62 21 6122403FAX: +62 21 6122404","picture":"default.jpg","level":"3"},{"key":"21","rev":"1489","name":"ACE MULTITRANS CARGO, PT.","address":"JAMKRINDO BLDG RM703JL.ANGKASA BLOK B9 KAV 6KEMAYORAN,JAKARTA 10720 INDONESIA ","picture":"default.jpg","level":"3"},{"key":"22","rev":"1489","name":"ACE MULTITRANS CARGO,PTNOM","address":"THE MANSION BOUGENVILLETOWER FONTANA ZONE 2, 37 FLOOR, I2-M2JL. TREMBESI BLOCK D, KEMAYORANJAKARTA UTARA 14410 - INDONESIA","picture":"default.jpg","level":"3"},{"key":"23","rev":"1641","name":"ACT LOGISTICS INTERNATIONAL PT","address":"JL. YOS SUDARSO KAV 89MITRA SUNTER BLDG 12TH FL-06 SUNTER 14350, JAKARTA INDONESIA ","picture":"default.jpg","level":"3"},{"key":"24","rev":"3","name":"ACT TRANS INTERNATONAL. PT","address":"WISMA MITRA SUNTER 9TH SUITE 904JL. YOS SUDARSO KAV 89 SUNTER JAYA JAKARTA UTARA","picture":"default.jpg","level":"3"},{"key":"25","rev":"3","name":"ACTLINK MARINE TRANSPORT, PT.","address":"MITRA SUNTER BUILDING 12TH FL., SUITE 02,MITRA SUNTER BOULEVARD BLOK C-2,JL. YOS SUDARSO KAV. 89, ","picture":"default.jpg","level":"3"},{"key":"26","rev":"1641","name":"ADETEX, PT.","address":"JL. DAYANG SUMBI NO. 4-6BANDUNG 40132 INDONESIA","picture":"default.jpg","level":"3"},{"key":"27","rev":"9","name":"ADETEXNOM PT.","address":"JL. DAYANG SUMBI NO. 4-6BANDUNG 40132 INDNESIA","picture":"default.jpg","level":"3"},{"key":"28","rev":"9","name":"ADHI JAYA METALINDO,PT ","address":"KP. CADAS RT. 005 RW. 002SEPATAN, TANGERANG 15520, BANTENINDONESIA ","picture":"default.jpg","level":"3"},{"key":"29","rev":"28","name":"ADHIKA MAJU MANDIRI,PT","address":"JALAN EDAM II NO. 15ATANJUNG PRIOK JAKARTA UTARATELP. (021) 43938867\/ 43924570-72FAX : 021-43924569","picture":"default.jpg","level":"3"},{"key":"30","rev":"28","name":"ADI TRANS LOGISTICS,PT","address":"RUKO ISLAMIC CENTRE GATE 2JL. KRAMAT JAYA NO. 22MJAKARTA UTARA 14260-INDONESIAT: 021-43932561","picture":"default.jpg","level":"3"},{"key":"33","rev":"19","name":"ADIRA SEMESTA INDUSTRY PT.","address":"JL.BIHBUL RAYA NO.73BANDUNG INDONESIA","picture":"default.jpg","level":"3"},{"key":"1489","rev":"10","name":"POU CHEN INDONESIA","address":"KAMPUNG GARDU RT.06\/RW.01 TAMBAK KIBINSERANG BANTEN, INDONESIA","picture":"default.jpg","level":"3"},{"key":"1641","rev":"10","name":"PT XIN CHENG DA","address":"JL. RAYA SERANG, KP. CIREWED SUKADAMAI\/CIKUPA KAB. TANGERANG","picture":"default.jpg","level":"3"},{"key":"2025","rev":"4","name":"PT. POU CHEN INDONESA","address":"KAMPUNG GARDU RT 06\/01 TAMBAKKIBIN SERANG BANTENSERANG, 42185INDONESIA","picture":"default.jpg","level":"3"},{"key":"2047","rev":"4","name":"PT. RHENUS LOGISTICS INDONESIA","address":"18 OFFICE PARK TOWER A UNIT 10 C JLTB SIMATUPANG NO. 18KEBAGUSAN PASAR MINGGUJAKARTA, INDONESIA 12520","picture":"default.jpg","level":"3"},{"key":"2778","rev":"19","name":"ZIMMOAH MARINE TRANS,PT","address":"KIRANA COMMERCIAL AVENUEJL. KIRANA AVENUE 2 BLOK D2 NO.10-11KELAPA GADING, JAKARTA UTARA 14240IND","picture":"default.jpg","level":"2"}]

I am trying to fetch data from root and then child with the following code

function get_revs() {
    
    $id =  session()->get('user')['id'];
    $db = model('AppModel', false);
    $db->setTable('mp_members');
    $db->query('DROP TABLE IF EXISTS temp_reveral_' . $id);
    $db->query('CREATE TEMPORARY TABLE `temp_reveral_' . $id .'`
        (
            `key` int(11) NOT NULL,
            `rev` varchar(11) NOT NULL,
            `name` varchar(50) NOT NULL,
            `address` varchar(250) NOT NULL,
            `picture` varchar(50) NOT NULL,
            `level` int(1) NOT NULL
        )'
    );
                
    $boss = model('AppModel', false)->setTable('mp_members')
            ->select('id as key, reveral as rev, name, address, picture, level')
            ->where('id', $id)
            ->get()->getResultArray();
            
    model('CrudModel', false)->setTable('temp_reveral_' . $id)->insert($boss[0]);
    
    $dt = model('AppModel', false)->setTable('mp_members')
        ->select('id as key, reveral as rev, name, address, picture, level')
        ->where('reveral !=', '-')
        ->where('reveral', $id)
        ->get();
    
    if( $dt->getNumRows() != 0 ) {
        foreach( $dt->getResultArray() as $row ) {
            $data[]=model('CrudModel', false)->setTable('temp_reveral_' . $id)->insert($row);   
        }
        /// how do i get the following data after this procedure
    }
    
    $dm = model('AppModel', false)->setTable('temp_reveral_' . $id)->get()->getResultArray();
    
    //dd( $dm, $data );
    return $dm; 

}

generate a chart like this


Solution

  • Below code can give solution for data i need

    private function get_reveral() {
        
        $id =  session()->get('user')['id'];
        $db = model('AppModel', false);
        $db->setTable('mp_members');
        $db->query('DROP TABLE IF EXISTS temp_reveral_' . $id);
        $db->query('CREATE TEMPORARY TABLE `temp_reveral_' . $id .'`
            (
                `key` int(11) NOT NULL,
                `rev` varchar(11) NOT NULL,
                `name` varchar(50) NOT NULL,
                `address` varchar(250) NOT NULL,
                `picture` varchar(50) NOT NULL,
                `email` varchar(50) NOT NULL,
                `level` int(1) NOT NULL
            )'
        );
                    
        $rev = model('AppModel', false)->setTable('mp_members')
                ->select('id as key, reveral as rev, name, address, picture, email, level')
                ->where('id', $id)
                ->get()->getResultArray();
                
        model('CrudModel', false)->setTable('temp_reveral_' . $id)->insert($rev[0]);
        
        $dt = model('AppModel', false)->setTable('mp_members')
            ->select('id as key, reveral as rev, name, address, picture, email, level')
            ->where('reveral', $id)
            ->get();
            
        $key = null;
        if( $dt->getNumRows() != 0 ) {
            foreach( $dt->getResultArray() as $row ) {
                model('CrudModel', false)->setTable('temp_reveral_' . $id)->insert($row);   
                $key[] = $row['key'];
            }
            
        }
        
        if($key == null) { 
            $da = model('AppModel', false)->setTable('temp_reveral_' . $id)->get()->getResultArray();
        } else {
            $da = $this->get_next_child($id, $key);
        }
        
        return $da;
    
    }
    
    
    private function get_next_child( $id , $array = null ) {
        
        foreach( $array as $row ) {
            $da[] = model('AppModel', false)->setTable('mp_members')
                    ->select('id as key, reveral as rev, name, address, picture, email, level')
                    ->where('reveral', $row)
                    ->get()->getResultArray();
        }
        
        $key = null;
        if($da != null) {
            $i = 0;
            foreach( $da as $row){
                if($row != null ) {
                    foreach( $row as $val){
                        model('CrudModel', false)->setTable('temp_reveral_' . $id)->insert($val);
                        $key[] = $val['key'];
                    }
                }
            }
            $i++;
        }
        
        if($key == null ) {
            $dc = model('AppModel', false)->setTable('temp_reveral_' . $id)->get()->getResultArray();
        } else {
            $dc = $this->get_next_child($id, $key);
        }
        
        return $dc;
        
    }
    

    The tree image below shows root changes according to member login sessions

    when changing session member login