2017-01-19 6 views
0

Сделать функцию has_twenty_ones, которая возвращает true, если хотя бы один из игроков в игре имеет 21, в противном случае возвращает false. Эта функция должна использовать функцию двадцать_ones.Как вернуть функцию внутри функции

function has_twenty_ones($game){ 
    function twenty_ones($game) 
    { 
     $players_with_score_21 = []; 
     foreach ($game['players'] as $name => $player) { 
      $distance = 21 - $player['score']; 
      if ($distance < 0) { 
       continue; 
      } 
      if ($distance == 21) { 
       $players_with_score_21 = [$name]; 
      } 
     } 
     return $players_with_score_21; 
    } 
    return isset($players_with_score_21); 

} 

, что это лучший способ, чтобы закодировать его

+0

Пожалуйста, покажите свой массив '$ game'. Что-то вроде 'print_r ($ game);' –

+0

Ну, во-первых, в качестве своей функции вы должны называть его где-то во внешней функции !!! ДУХ !!! – RiggsFolly

ответ

2

Просто проверьте, если возвращение twenty_ones функции пусто, если он вернется ложным overthose возврата товара twenty_ones значения.

function has_twenty_ones($game){ 
    function twenty_ones($game){ 
     $players_with_score_21 = []; 
     foreach ($game['players'] as $name => $player) { 
      $distance = 21 - $player['score']; 
      if ($distance < 0) { 
       continue; 
      } 
      if ($distance == 21) { 
       $players_with_score_21 = [$name]; 
      } 
     } 
     return $players_with_score_21; 
    } 
    $playersWithScore = twenty_ones($game); 
    if (!empty($playersWithScore)) { 
     return $playersWithScore; 
    } else { 
     return false; 
    } 
} 
+0

Зачем OP использовать этот код? ** Хороший ответ ** всегда будет объяснять, что было сделано и почему это было сделано таким образом, не только для OP, но и для будущих посетителей SO, которые могут найти этот вопрос и прочитать ваш ответ. – RiggsFolly

+0

@RiggsFolly Я всегда отправляю решение сначала, а затем описываю, что я сделал –

+0

Но вы переместили функцию ** Out ** функции, когда заголовок явно говорит о функции ___A В функции___ – RiggsFolly

-1
function twenty_ones($game) 
{ 
    $players_with_score_21 = []; 
    foreach ($game['players'] as $name => $player) { 
     $distance = 21 - $player['score']; 
     if ($distance < 0) { 
     continue; 
     } 
     if ($distance == 21) { 
        $players_with_score_21 = [$name]; 
     } 
    } 
    return $players_with_score_21; 
} 

function has_twenty_ones($game){ 
    if (count ($this->twenty_ones($game)) > 0) 
     return true; 
    else 
     return false; 
} 
+0

Ваш ответ неверен. '$ players_with_score_21' не определен внутри' has_twenty_ones' функция '$ this' также не определена. Btw. он всегда будет возвращать значение 'boolean'. –

+0

@kcp да, я имею в виду, что return isset ($ this-> twenty_ones ($ game)); Я обновил свой ответ выше – 1616

+0

Но вы переместили функцию ** Out ** функции, когда заголовок явно говорит о функции ___A В функции___ – RiggsFolly

0

Я не знаю, почему вам нужны две функции для этого.

Как уже упоминалось @RiggsFolly, вы фактически не звоните в функцию twenty_ones(). Почему бы не иметь следующий код:

function has_twenty_ones($game) 
{ 
    foreach($game['players'] as $name => $player) 
    { 
     $distance = 21 - $player['score']; 
     if ($distance < 0) { 
      continue; 
     } 
     // If at least one player has 21, return true. 
     if($distance == 21) { 
      return true; 
     } 
    } 
    return false; 
} 

выше возвращает истину, когда он встречает игрок, который имеет счет 21, в противном случае она вернет ложь.