2016-03-16 4 views
-1

Я пытаюсь нажать на трехмерный массив, но с проблемой.Попытка нажать на трехмерный массив в php

$players = array(
    array("player1", array(0,1,2,1,2,1), array(0,1,3,4,6,7) 
    ), 
    array("player2", array(0,3,2,3,1,2), array(0,3,5,8,9,11)  
    ), 
    array("player3", array(0,2,3,1,2,3), array(0,2,5,6,8,11) 
    ) 
); 

$roundNumber = 5; 


function addScore($playerNumber, $playerScore){ 

    array_push(($players[$playerNumber][1]), $playerScore); 

    $nextTotalScore = $playerScore + $players[$playerNumber][2][$roundNumber]; 

    $players[$playerNumber][$playerNumber][2][$roundNumber] = $nextTotalScore; 

} 

addScore(0,5); 

Я пытаюсь иметь трехмерный массив, который содержит имя игрока, то массив для круглого балла, то массив для общего балла. Кажется, он не распознает $ players [$ playerNumber] [1] как массив. Я получаю следующее предупреждение, указывающее на эту линию:

Предупреждение: array_push() ожидает параметр 1, чтобы быть массивом, Null данного

Я не знаю, как еще я должен назвать мои предназначенным массив. Должен ли я использовать функцию push?

+1

Предлагаю вам добавить «глобальных игроков $, $ roundNumber; внутри вашей функции addScore. – Wizard

+0

Возможный дубликат [Возрастание значения инициализации массива в php] (http://stackoverflow.com/questions/21240213/increasing-not-initialize-array-value-in-php) –

+0

Не было бы $ $ игроков [$ playerNumber ] [$ playerNumber] [2] [$ roundNumber] = $ nextTotalScore' делает его четырехмерным массивом? – Revenant

ответ

0

Вы должны передать $ игрокам свою функцию.

$players = array(
    array("player1", array(0,1,2,1,2,1), array(0,1,3,4,6,7) 
    ), 
    array("player2", array(0,3,2,3,1,2), array(0,3,5,8,9,11) 
    ), 
    array("player3", array(0,2,3,1,2,3), array(0,2,5,6,8,11) 
    ) 
); 

$roundNumber = 5; 


function addScore($players, $playerNumber, $playerScore){ 

    array_push(($players[$playerNumber][1]), $playerScore); 

    $nextTotalScore = $playerScore + $players[$playerNumber][2][$roundNumber]; 

    $players[$playerNumber][$playerNumber][2][$roundNumber] = $nextTotalScore; 

    return $players; 

} 

$players = addScore($players, 0,5); 

Это даст вам другие ошибки, такие как RoundNumber, которые не определены. Но, если вы только что узнали что-то, вы это получите. Кроме того, попробуйте найти более четкий способ для имен ключей массива. Игра с числовыми индексами опасна.

+0

awesome. спасибо за ваш вклад. казалось, что возвращение имеет решающее значение. Я добавил еще одну переменную, равную $ GLOBALS ['roundNumber'] в моей функции, и она сработала. – crownycats

+0

Я также предлагаю избегать глобальных переменных столько, сколько вы можете. Есть лучшие практики. –

Смежные вопросы