За последние 24 часа нас посетили 15939 программистов и 1539 роботов. Сейчас ищут 833 программиста ...

Непонятная проблема с массивом

Тема в разделе "PHP для новичков", создана пользователем AndreyDyomin, 23 янв 2009.

  1. AndreyDyomin

    AndreyDyomin Активный пользователь

    С нами с:
    2 дек 2008
    Сообщения:
    12
    Симпатии:
    0
    Я не знаю что такое, мыслей уже нет. Ситуация очень глупая - задаю массив:

    $wordList = array(
    'АНДРЕЙ',
    'НАТАЛЬЯ',
    'ТАТЬЯНА'
    );

    А у меня в переменную $wordList попадает слово array! о_0
    Что за бред? Подскажите, пожалуйста.
     
  2. Frozen

    Frozen Активный пользователь

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Так и скажи, что пытаешься распечатать этот массив с помощью echo или print ;-)
     
  4. AndreyDyomin

    AndreyDyomin Активный пользователь

    С нами с:
    2 дек 2008
    Сообщения:
    12
    Симпатии:
    0
    Так, мне надо потом этот массив разбить на буквы и уместить в поле 10х10

    Я игру "Поиск слов" пишу...

    Я уже и вручную индексы прописывал - не работает. Причем в этой же программе еще два похожих массива работают как положено... о_0
     
  5. VItalijs

    VItalijs Активный пользователь

    С нами с:
    17 дек 2008
    Сообщения:
    244
    Симпатии:
    0
    Адрес:
    Рига, Латвия
    что выводит $wordList[1] ?
     
  6. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    AndreyDyomin
    PHP:
    1.  
    2. <?php
    3. print '<pre>';
    4. print_r ($wordList);
    5. ?>
    6.  
     
  7. _alex

    _alex Активный пользователь

    С нами с:
    29 янв 2007
    Сообщения:
    43
    Симпатии:
    0
    А буквы могут повторяться?
    А если букв меньше или больше ста?
    Какие правила игры?

    И вообще массив зачем? Лепи в строку.

    Пишу то, что первое пришло на ум, может можно и проще, но время позднее, так что мозговая деятельность минимальная:
    Код (Text):
    1.  
    2. # непосредственно массив
    3. $wordList = array('АНДРЕЙ', 'НАТАЛЬЯ', 'ТАТЬЯНА');
    4.  
    5. # объединяем элементы массива в строку
    6. $str = implode('', $wordList);
    7.  
    8. unset($wordList);
    9.  
    10. # преобразуем строку в массив
    11. $chars = str_split($str);
    12.  
    13. unset($str);
    14.  
    15. # рисуем табличку
    16. echo '<table border=1><tr>';
    17.  
    18. for($i=0; $i<count($chars); $i++)
    19. {
    20.     if(10/$i===1)
    21.     {
    22.         echo '</tr><tr>';
    23.     }
    24.  
    25.     echo '<td>'.$chars[$i].'</td>';
    26.  
    27. }
    28.  
    29. echo '</tr></table>';
    30.  
    31. unset($i, $chars);
    Хотя может всё и не так.
    Изложите вкратце правила игры.

    з.ы.: мне совсем не нравиться эта карусель с массивом и строкой
     
  8. AndreyDyomin

    AndreyDyomin Активный пользователь

    С нами с:
    2 дек 2008
    Сообщения:
    12
    Симпатии:
    0
    Пользователь указывает размер поля (по умолчанию 10х10) и список слов, который надо спрятать. Программа берет слова, разделяет в массив, располагает по четырем рандомным направлениями (слева направо, справа налево, сверху вниз, снизу вверх), добавляет "контрастные" случайные буквы в пустые поля и выводит игру на экран.
    Буквы могут "пересекаться" в словах, ограничение на слишком длинное слово работает.

    Смысл в чем - игра РАБОТАЕТ, если работать со словами, введенными пользователем в форме. Массив отлично заполняется и функционирует, если его забить как:

    $wordList = $_POST["wordList"];

    А описанная мной проблема - это массив слов по умолчанию, если пользователь не ввел свои...

    За советы все тут спасибо - сегодня попробую...
     
  9. AndreyDyomin

    AndreyDyomin Активный пользователь

    С нами с:
    2 дек 2008
    Сообщения:
    12
    Симпатии:
    0
    Не работает... :(
    Я не понимаю, я уже указывал всеми возможными способами! Причем в этой же программе рядом заданы таким способом еще 2 массива и они РАБОТАЮТ! О_0

    Выкладываю весь код программы, сырой, но рабочий. Я реально хочу ПОНЯТЬ что за фигня...

    PHP:
    1.  
    2. <?php
    3.  
    4. if (isset ($_POST["wordList"]) and $_POST["wordList"] != "") {
    5.     $wordList = $_POST["wordList"];
    6. } else {
    7.     $wordList = array(
    8.         'АНДРЕЙ',
    9.         'НАТАЛЬЯ',
    10.         'ТАТЬЯНА'
    11.     );
    12. }
    13.  
    14. $boardData = array(
    15.     width => 10,
    16.     height => 10,
    17.     name => "blablabla"
    18. );
    19.  
    20. if (parseList() == TRUE) {
    21.     $legalBoard = FALSE;
    22.  
    23.     while ($legalBoard == FALSE) {
    24.         clearBoard();
    25.         $legalBoard = fillBoard();
    26.     }
    27.    
    28.     $key = $board;
    29.     $keyPuzzle = makeBoard($key);
    30.  
    31. //  addFoils();
    32.  
    33.     $puzzle = makeBoard($board);
    34.  
    35.     printPuzzle();
    36. }
    37.  
    38.  
    39. function parseList() {
    40.     global $word, $wordList, $boardData;
    41.  
    42.     $itWorked = TRUE;
    43.     $wordList = strtoupper($wordList);
    44.     $word = split("\n", $wordList);
    45.  
    46.     foreach ($word as $currentWord) {
    47.         $currentWord = rtrim($currentWord);
    48.         if ((strlen($currentWord) > $boardData["width"]) &&
    49.             (strlen($currentWord) > $boardData["height"])) {
    50.             echo "Слово <strong>$currentWord</strong> слишком длинное для этого паззла!";
    51.             $itWorked = FALSE;
    52.         }
    53.     }
    54.     return $itWorked;
    55. }
    56.  
    57.  
    58. function clearBoard() {
    59.     global $board, $boardData;
    60.    
    61.     for ($row = 0; $row < $boardData["height"]; $row++) {
    62.         for ($col = 0; $col < $boardData["width"]; $col++) {
    63.             $board[$row][$col] = ".";
    64.         }
    65.     }
    66. }
    67.  
    68.  
    69. function fillBoard() {
    70.     global $word;
    71.    
    72.     $direction = array("N", "S", "E", "W");
    73.     $itWorked = TRUE;
    74.     $counter = 0;
    75.     $keepGoing = TRUE;
    76.    
    77.     while ($keepGoing) {
    78.         $dir = rand(0, 3);
    79.         $result = addWord($word[$counter], $direction[$dir]);
    80.         if ($result == FALSE) {
    81.             $keepGoing = FALSE;
    82.             $itWorked = FALSE;
    83.         }
    84.         $counter++;
    85.         if ($counter >= count($word)) {
    86.             $keepGoing = FALSE;
    87.         }
    88.     }
    89.     return $itWorked;
    90. }
    91.  
    92.  
    93. function addWord($theWord, $dir) {
    94.     global $board, $boardData;
    95.    
    96.     $theWord = rtrim($theWord);
    97.     $itWorked = TRUE;
    98.    
    99.     switch ($dir) {
    100.         case "E":
    101.         $newCol = rand(0, $boardData["width"] - 1 - strlen($theWord));
    102.         $newRow = rand(0, $boardData["height"] - 1);
    103.         for ($i = 0; $i < strlen($theWord); $i++) {
    104.             $boardLetter = $board[$newRow][$newCol + $i];
    105.             $wordLetter = substr($theWord, $i, 1);
    106.             if (($boardLetter == $wordLetter) ||
    107.                 ($boardLetter == ".")) {
    108.                 $board[$newRow][$newCol + $i] = $wordLetter;
    109.             } else {
    110.                 $itWorked = FALSE;
    111.             }
    112.         }
    113.         break;
    114.            
    115.         case "W":
    116.         $newCol = rand(strlen($theWord), $boardData["height"] - 1);
    117.         $newRow = rand(0, $boardData["height"] - 1);
    118.         for ($i = 0; $i < strlen($theWord); $i++) {
    119.             $boardLetter = $board[$newRow][$newCol - $i];
    120.             $wordLetter = substr($theWord, $i, 1);
    121.             if (($boardLetter == $wordLetter) ||
    122.                 ($boardLetter == ".")) {
    123.                 $board[$newRow][$newCol - $i] = $wordLetter;
    124.             } else {
    125.                 $itWorked = FALSE;
    126.             }
    127.         }
    128.         break;
    129.            
    130.         case "S":
    131.         $newCol = rand(0, $boardData["width"] - 1);
    132.         $newRow = rand(0, $boardData["height"] - 1 - strlen($theWord));
    133.         for ($i = 0; $i < strlen($theWord); $i++) {
    134.             $boardLetter = $board[$newRow + $i][$newCol];
    135.             $wordLetter = substr($theWord, $i, 1);
    136.             if (($boardLetter == $wordLetter) ||
    137.                 ($boardLetter == ".")) {
    138.                 $board[$newRow + $i][$newCol] = $wordLetter;
    139.             } else {
    140.                 $itWorked = FALSE;
    141.             }
    142.         }
    143.         break;
    144.  
    145.         case "N":
    146.         $newCol = rand(0, $boardData["width"] - 1);
    147.         $newRow = rand(strlen($theWord), $boardData["height"] - 1);
    148.         for ($i = 0; $i < strlen($theWord); $i++) {
    149.             $boardLetter = $board[$newRow - $i][$newCol];
    150.             $wordLetter = substr($theWord, $i, 1);
    151.             if (($boardLetter == $wordLetter) ||
    152.                 ($boardLetter == ".")) {
    153.                 $board[$newRow - $i][$newCol] = $wordLetter;
    154.             } else {
    155.                 $itWorked = FALSE;
    156.             }
    157.         }
    158.         break;
    159.     }
    160.     return $itWorked ;
    161. }
    162.  
    163.  
    164. function makeBoard($theBoard) {
    165.     global $boardData;
    166.    
    167.     $puzzle = "";
    168.     $puzzle .= "<table border=0>\n";
    169.     for ($row = 0; $row < $boardData["height"]; $row++) {
    170.         $puzzle .= "<tr>\n";
    171.         for ($col = 0; $col < $boardData["width"]; $col++) {
    172.             $puzzle .= " <td width=15>".$theBoard[$row][$col]."</td>\n";
    173.         }
    174.         $puzzle .= "</tr>\n";
    175.     }
    176.     $puzzle .= "</table>\n";
    177.     return $puzzle;
    178. }
    179.  
    180.  
    181. function addFoils() {
    182.     global $board, $boardData;
    183.    
    184.     for ($row = 0; $row < $boardData["height"]; $row++) {
    185.         for ($col = 0; $col < $boardData["width"]; $col++) {
    186.             if ($board[$row][$col] == ".") {
    187.                 $newLetter = rand(65, 90);
    188.                 $board[$row][$col] = chr($newLetter);
    189.             }
    190.         }
    191.     }
    192. }
    193.  
    194.  
    195. function printPuzzle() {
    196.     global $puzzle, $word, $keyPuzzle, $boardData;
    197.    
    198.     echo "<center><h1>".$boardData[name]."</h1>$puzzle";
    199. }
    200. ?>
    201.  
     
  10. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    $wordList массив ведь. А Вы используете для его обработки функцию, которая работает со строками.

    жесть
    http://ru2.php.net/manual/ru/language.types.array.php
     
  11. AndreyDyomin

    AndreyDyomin Активный пользователь

    С нами с:
    2 дек 2008
    Сообщения:
    12
    Симпатии:
    0
    Не понял, в чем жесть? Вроде бы задано по всем правилам...

    Вы мне объясните, пожалуйста, 2 вещи:
    1. Почему в $wordList попадает слово array, хотя все вроде правильно, и массивы заданные таким же способом в этой же программе работают на ура. Ладно бы массив не создавался вообще, не работал, или был пустым, но причем тут array? Это по какой такой логике?
    2. Почему тот же самый массив, переданный из формы работает? Обрабатывается он точно так же...
     
  12. Frozen

    Frozen Активный пользователь

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва
    массив задается словом array
    ты хочеш вывести массив (список элементов), не указав к какому конкретно обращаешся. php не знает какой те нужен и поэтому предупреждает что это array