#php #arrays #function #class #recursion
#php #массивы #функция #класс #рекурсия
Вопрос:
Я застрял, возможно, с простым вопросом. Я создал новый класс со многими вычислениями внутри. У меня есть рекурсивный массив для динамической генерации SQL из результата Die. Когда результат находится между заданным диапазоном, мне придется выполнить дополнительную операцию.
У меня есть этот многомерный массив для заполнения значением моей кости, используя массив идентификаторов в качестве моего первого «ключа»:
$this->multidim[$id_object][]
Я думал о создании другой функции для ее заполнения, но я не уверен, как ее правильно построить. Спецификации этой функции, которые мне нужны, следующие:
- Мне нужно вызвать функцию с многомерным массивом и
- Если результат равен 100, мне нужно дважды бросить кости и снова проверить результат
$this->checkresult($id_obj, $die);
function checkresult($id_obj, $die)
{
if ($die == 100){
$rand1 = $this->launchDie(1, 100);
$rand2 = $this->launchDie(1, 100);
if($this->checkresult($array, $rand1)) {
if($this->checkresult($array, $rand2)) {
return 1;
}
}
} else {
if (!isset($array[$tiro])) {
$this->multidim[$id_obj][$die] = 1;
}
return 1;
}
}
Правильный ли этот подход? Мне неудобно не возвращать «реальное» значение, но, как я уже сказал, мне нужно повторно вызвать эту функцию рекурсивно.
Комментарии:
1. Для чего нужен код
setSpecialCount()
и откуда берутся переменные$array
и$tiro
?2. извините, я забыл изменить свою ссылку. редактирование прямо сейчас.
Ответ №1:
Вы можете вернуть свернутое значение следующим образом:
public function addResult($object_id, $result)
{
$this->multidim[$object_id][] = $result;
}
public function checkResult($object_id)
{
$roll = $this->launchDie(1, 100);
if ($roll == 100) {
$additionalRoll = $this->checkResult($object_id);
$this->addResult($object_id, $additionalRoll);
$roll = $this->checkResult();
}
return $roll;
}
И назовите это так:
$this->addResult($object_id, $this->checkResult($object_id));
Таким образом, каждый раз, когда выпадает 100, будет два броска вместо одного. Пожалуйста, обратите внимание, что это может продолжаться вечно (хотя это маловероятно ;)).
Также обратите внимание, что я изменил структуру вашего многомерного массива, так как это имело для меня больше смысла, вам может потребоваться изменить это обратно, если оно не соответствует тому, чего вы хотели бы достичь.