your code is failing because the first argument to array_push() must be an array. $b[$k] is not an array, it is one just one index of the $b array.
The array_push() function is for adding multiple items to the end of an array. If all you need to do is add one item, then you don't need array_push(), just do:
$b[]= 'value';
array_push() can take other arrays as arguments and the result will be a 2D array:
$array1 = array (
'1' => 'one',
'2' => 'two',
'3' => 'three',
'4' => 'four',
'5' => 'five'
);
$array2 = array (
'6' => 'six',
'7' => 'seven',
'8' => 'eight',
'9' => 'nine',
'10' => 'ten'
);
array_push ($array1, $array2);
Now, the sixth index of $array1 will be another array ($array2) making $array1 two dimensional.
If you just want to combine 2 arrays (tack one on the end of another) then just do:
$array3 = $array2 + $array1;
This is better than array_merge() because it does not mess up you keys names.