2012-03-15 4 views
1

Я хотел сделать свой собственный четвертьфинал в лиге чемпионов (завтра, пятница 16 марта): у меня есть 2 вопроса: сначала модуль не работает: он показывает «другое совпадение» после каждой записи в массив, тогда как я хотел, чтобы он был написан каждые два матча (каждые 2 записи) ...php modulo и print_r результата?

Второй вопрос: есть ли лучший способ «распечатать» результат? как print_r без индекса и где я могу сказать «добавить \n после каждой записи»?

<body> 
<?php 

$array = array("real", "barça", "bayern", "apoel", "chelsea", "milan", "benfica", "marseille"); 

$new = array(); 
$incr = count($array); 

while($incr>0){ 
    $random = rand(0, count($array)); 

    if (!in_array($array[$random], $new)){ 
     $new[] = $array[$random]; 
     if ((count($new) % 2)){ 
      $new[] = " -- another match : "; 
     } 
     $incr--; 
    } 
} 

print_r($new); 


?> 
<p>results</p> 
</body> 

Спасибо за вашу помощь

ответ

1

по модулю работает отлично:

  • Массив начинается пустой.
  • Вы добавляете к нему элемент.
  • Длина 1, так 1 % 2, так 1, так truthy, так что вы добавить -- another match в массив
  • Так длина теперь 2
  • Следующая итерация цикла, можно добавить еще один элемент к массив.
  • Длина теперь 3, так 3 % 2, так 1, так truthy, так что вы добавить -- another match

И так далее. Независимо от того, что вы пытаетесь сделать, это не то, что вы сказали серверу делать.

То, что вы, вероятно, следует сделать что-то вроде этого:

$array = Array(........); 
while($a = array_shift($array)) { 
    $random = rand(0,count($array)-1); // -1 is important! 
    echo $a." vs. ".$array[$random]."<br />"; 
    unset($array[$random)]; 
    // no need to realign keys since array_shift already does that 
} 
+0

спасибо, интересно, почему вы используете uns и др? для print_r, да, на самом деле я могу поместить базовый код html в переменную, с '
' кажется хорошим решением – Paul

+0

hmm, а около -1? array_shift изменяет '$ array', поэтому' count ($ array) '- количество элементов в массиве после сдвига ... не так ли? – Paul

+0

Отсоединение элемента массива гарантирует, что он не будет снова выбран. И для '-1' ... Ну, предположим, что у вас есть' Array ('a', 'b', 'c') ',' count' равно 3, но последний элемент находится в позиции '2'. –

0

Модуль работает точно так, как вы говорите его.

(количество ($ новый)% 2)) {

when count($new) = 1, 1 % 2 = 1, = true 
when count($new) = 2, 2 % 2 = 0, = false 
when count($new) = 3, 3 % 2 = 1, = true 
when count($new) = 4, 4 % 2 = 0, = false 
when count($new) = 5, 5 % 2 = 1, = true 
when count($new) = 6, 6 % 2 = 0, = false 
+0

спасибо Mark Baker – Paul

2

Другим вариантом было бы shuffle массива затем просто pop от каждого из элементов

$array = array("real", "barça", "bayern", "apoel", "chelsea", "milan", "benfica", "marseille"); 

shuffle($array); 

while($a = array_pop($array)) { 
    echo $a." vs. ".array_pop($array)." <br />"; 
} 

Пример вывода:

apoel vs. real 
barça vs. milan 
marseille vs. bayern 
chelsea vs. benfica 
+0

приятно спасибо, хорошее решение тоже – Paul

+2

@Paul Это немного причудливый .. похоже, что мой прогноз был прав! – Ciaran

+0

ха-ха, хорошо, можете ли вы создать функцию, чтобы узнать победителя? – Paul

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