Search code examples
phparraysarray-push

PHP array_push() without ordering


I am using the array_push() method to insert ids from my database.

Example:

print_r($arr_usr_ids);
Array ( [0] => 34 [1] => 35 [2] => 34 [3] => 37 [4] => 38 [5] => 30 ... ) 

$arr_usrs = array();

foreach($arr_usr_ids as $key => $value) {
if(isset($group_id[1]) && '1'=== $group_id[0]) {
 $numbers = $arr_usr_ids[$key]; // 30
 $arr_usrs[] = $numbers;
} else

if(isset($group_id[1]) && '2'=== $group_id[0]) {
 $numbers = $arr_usr_ids[$key]; // 34,33
 $arr_usrs[] = $numbers;
} 
...
}

and so on...

but array_push is ordering the numbers

print_r($arr_usrs);
Array ( [0] => 30 [1] => 33 [2] => 34 [3] => 37 [4] => 38 ) 

the correct result would be 30,34,33,38,37

EDIT this works:

$arr_usrs_one = array();
$arr_usrs_two = array();
$arr_usrs_three = array();

foreach($arr_usr_ids as $key => $value) {
if(isset($group_id[1]) && '1'=== $group_id[0]) {
 $numbers = $arr_usr_ids[$key]; // 30
 $arr_usrs_one[] = $numbers;
} else

if(isset($group_id[1]) && '2'=== $group_id[0]) {
 $numbers = $arr_usr_ids[$key]; // 34,33
 $arr_usrs_two[] = $numbers;
}
... 
}

$result_usrs = array_merge($arr_usrs_one,$arr_usrs_two,$arr_usrs_three);

Solution

  • Just change from array_push to []:

    $arr_usrs = array();
    
    if(isset($group_id[1]) && '1'=== $group_id[0]) {
     $numbers = $arr_usr_ids; // 30
     $arr_usrs[] = $numbers;
    }
    
    if(isset($group_id[1]) && '2'=== $group_id[0]) {
     $numbers = $arr_usr_ids; // 34,33
     $arr_usrs[] = $numbers;
    }
    print_r($arr_usrs);