Похоже, это может быть ошибка, связанная с массивами, но я не могу понять это. Я действительно начинаю с PHP, и это становится немного пугающим. Любая помощь будет принята с благодарностью! вот мой код:
<?php echo "<h1>Choose a Poll!</h1>"; $read = file('poll_topics.txt'); $data = array( ); foreach($read as $lines){ list($key,$v) = explode("|","$lines"); $data[$key] = $v; } foreach ($data as $k=>$desc){ echo "<ul><li><a href='take_a_poll.php?poll=$k'>$k</a> - $desc </li></ul>"; } ?>
Вот что находится в текстовом файле:
Instruments|What kind of instruments do you like? Music|What type of music do you like best?
Я должен уточнить: ошибка – строка 20 или где он говорит list($key,$v) = explode...
У вас есть пустая строка. Вот почему explode()
вернет только пустой ключ $, но не имеет права присваивать $ v. И это когда оно печатает это уведомление.
Вы можете переписать его немного, чтобы игнорировать такие случаи:
foreach ($read as $lines) { $key = strtok($lines, "|"); $v = strtok("|"); if ($v) { $data[$key] = $v; } }
Это также позволит избежать пустой записи в вашем конечном массиве $ data.
Попробуй это:
<?php echo "<h1>Choose a Poll!</h1>"; $_fileData = file_get_contents('poll_topics.txt'); $_results = array(); if ( ! empty( $_fileData ) ) { foreach ( $_fileData as $_line ) { $_split = explode( '|', $_line ); // Many ways to do this: // if ( !empty( $_split ) && 2 == count( $_split ) ) then no error else error // or... if ( isset( $_split[0], $_split[1] ) ) { $_key = $_split[0]; $_value = $_split[1]; if ( null !== $_key && null !== $_value ) { $_results[ $_key ] = $_value; // or $_results[] = array( $_key => $_value ); if key can be duplicated } } } }
Вы можете попытаться использовать array_pad()
. Используйте его там, где вы написали функцию взрыва.
$_split = array_pad(explode( '|', $_line ), numberOfElementsInArray, null);