PHP - 无法为第三维数组添加值

I have a this array scenario at first:

$_SESSION['player_1_pawn'][] = 'Warrior';

now when I want to add a third dimensional value like this:

$_SESSION['player_1_pawn'][0]['x'] = 1;

I get this output from

>$_SESSION['player_1_pawn'][0] : '1arrior'

My question is that, how to make that value stays intact as Warrior instead of 1arrior?

If the value is already a string, ['x'] accesses the first character of that string (yeah, don't ask ;)).

If you want to replace the whole thing with an array, do:

$_SESSION['player_1_pawn'][0] = array('x' => 1);

You cannot have $_SESSION['player_1_pawn'][0] be both the string "Warrior" and an array at the same time, so figure out which you want it to be. Probably:

$_SESSION['player_1_pawn'][0] = array('type' => 'Warrior', 'x' => 1);

Your problem is that $_SESSION['player_1_pawn'][0] is a scalar value equal to "Warrior". When you treat a scalar as an array, like you do with $_SESSION['player_1_pawn'][0]['x'] which evalueates $_SESSION['player_1_pawn'][0][0] or "W", you just change the first character in the string.

If you want to keep "Warrior" try this:

$_SESSION['player_1_pawn']=array('Warrior', 'x'=>1);

ETA:

given your requirements, the structure is this:

$_SESSION['player_1_pawn'] = array(
  0 => array('Warrior', 'x'=>1),
  1 => array('Wizard', 'x'=>7), //...
);

Which means you add like this:

$_SESSION['player_1_pawn'][]=array('Warrior', 'x'=>1);