通过PHP中的循环在数组中推送值

I'm trying to push values in a 2D array through foreach loop, I get some strange results while doing so. Please take a look at the code:

   foreach( $terms as $term ) {
                if(is_parent_tax($term)==TRUE){
                 $parent_term = get_term( $term->term_id, $taxonomy_name );
                    if(!in_array($parent_term->name,$term_list)){
                    $term_list[]['name']  = $parent_term->name ;
                    $term_list[]['slug'] = $parent_term->slug;
                    }
                }
              } 

Through a print_r test, I get the following results:

Array ( [0] => Array ( [name] => Category 2 ) [1] => Array ( [slug] => category-2 ) [2] => Array ( [name] => Category 3 ) [3] => Array ( [slug] => category-3 ) [4] => Array ( [name] => Category 4 ) [5] => Array ( [slug] => category-4 ) [6] => Array ( [name] => Category 2 ) [7] => Array ( [slug] => category-2 ) [8] => Array ( [name] => Category 1 ) [9] => Array ( [slug] => category-1 ) )

What I want instead, is:

Array ( [0] => Array ( [name] => Category 2 ) [0] => Array ( [slug] => category-2 ) [1] => Array ( [name] => Category 3 ) [1] => Array ( [slug] => category-3 ) [2] => Array ( [name] => Category 4 ) [2] => Array ( [slug] => category-4 ) [3] => Array ( [name] => Category 2 ) [3] => Array ( [slug] => category-2 ) [4] => Array ( [name] => Category 1 ) [4] => Array ( [slug] => category-1 ) )

Since no one explained why it didn't work.

Your usage of [] is incorrect. You're causing it to create another index. See Barth's answer although I would be using:

$term_list[] = array('name' => $parent_term->name, 'slug' => $parent_term->slug);

:)

$term_list[] = ['name' => $parent_term->Name, 'slug' => $parent_term->slug];

is the right way to go.

Just a small change to your foreach can do the trick

foreach( $terms as $key => $term ) {
    if(is_parent_tax($term)==TRUE){
     $parent_term = get_term( $term->term_id, $taxonomy_name );
        if(!in_array($parent_term->name,$term_list)){
            $term_list[$key]['name']  = $parent_term->name ;
            $term_list[$key]['slug'] = $parent_term->slug;
        }
    }
} 

your

Array ( [0] => Array ( [name] => Category 2 ) [0] => Array ( [slug] => category-2 ) [1] => Array ( [name] => Category 3 ) [1] => Array ( [slug] => category-3 ) [2] => Array ( [name] => Category 4 ) [2] => Array ( [slug] => category-4 ) [3] => Array ( [name] => Category 2 ) [3] => Array ( [slug] => category-2 ) [4] => Array ( [name] => Category 1 ) [4] => Array ( [slug] => category-1 ) )

consists of duplicate keys which will be over written by other

The better way is to get it as

 Array
(
    [0] => Array
        (
            [name] =>  Category 2
            [slug] => category-2
        )

    [1] => Array
        (
            [name] =>  Category 3
            [slug] => category-3
        )
)