2013-03-21 3 views
1

Может кто-нибудь, пожалуйста, скажите мне, почему мой код вторит всему массиву, а не только двум значениям, указанным в $list. Я почти не знаю ни одного php, так может кто-то сказать мне, что не так?эхо-часть массива? PHP

if(isset($_POST['button'])) { 
    if($_POST['filmnamn'] != "" && $_POST['betyg'] != "" && $_POST['link'] != "" && $_POST['photo'] != "" && $_POST['description'] != "") { 
     $myFile = 'demo.txt'; 
     $titel = $_POST['filmnamn'] . ";" ; 
     $betyg = $_POST['betyg'] . ";" ; 
     $link = $_POST['link'] . ";" ; 
     $photo = $_POST['photo'] . ";" ; 
     $desc = $_POST['description'].PHP_EOL; 
     $data = "$titel$betyg$link$photo$desc"; 
     $list = "$titel$betyg"; 
     $fh = fopen($myFile, 'a'); 
     fwrite($fh, $data); 

     fclose($fh); 

     $handle = fopen($myFile, 'r'); 
     $fileinfo = fread($handle, filesize($myFile)); 
     $fileinfo_array = explode(';', $fileinfo); 
     foreach($fileinfo_array as $list){ 
      echo $list; 
     } 
    } 
} 
+1

Вы знали, что записываете $ data в свой текстовый файл, а не $ list, и поэтому данные $ содержат все входящие поля, а не только два поля в $ list. – Dave

+0

Я знаю это, но мне нужно, чтобы все данные записывались в txt-файл, потому что мне нужны другие данные позже, и на данный момент мне нужно только напечатать два первых элемента в текстовом файле ... – spovell

+0

использовать fgetcsv (), чтобы открыть текстовый файл, а не fread, а затем просто пропустить результирующий массив, в котором вы хотите видеть элементы [0] и [1] http://php.net/manual/en/function.fgetcsv.php. 3 строки кода это для вас :) – Dave

ответ

3

Вы устанавливаете $list, но затем вы переписываете его в foreach.

$list = "$titel$betyg"; 

Тогда вы

foreach($fileinfo_array as $list){ 
    echo $list; 
} 

Где она становится каждый элемент массива.Вы можете echo из просто $list или использования:

$list = explode(";", $list); 
array_pop($list); //remove last blank item 
foreach($list as $item){ 
    echo $item; 
} 

EDIT:

Это будет читать файл построчно и создать массив

while (!feof($handle)) { 
    $lines[] = fgets($handle); 
} 
fclose($handle); 

Nex вы хотите повторить информация:

foreach($lines as $list){ 
    //use my above code 
} 

Примечание: посмотрите в file_put_contents

+0

ok, я могу видеть, что foreach не должен быть там вообще? если так, что заменить его? – spovell

+0

@spovell только что отредактировал мой ответ. – UnholyRanger

+0

список как элемент не работает для меня, и если я только выхожу из списка его работы, но затем; также идет с текстом, и что я не хочу? – spovell

1

вместо того чтобы дать эхо одной переменной:

print_r($list); 
1

эта линия:

fwrite($fh, $data); 

вы пишете все элементы массива, прежде чем в файл; она должна быть

fwrite($fh, $list); 

EDIT:

просто прямой доступ к элементу, если это только два;

$fileinfo_array[0]; 
$fileinfo_array[1]; 

или вы можете использовать array_slice();

+0

Мне нужно написать все элементы в текстовый файл, но мне нужны только два первых элемента для печати. ​​ – spovell

+0

просто отредактировал мой ответ – egig

+0

, тогда он записывает только два первых элемента в массиве каждый раз, когда я push submit, мне нужно, чтобы он каждый раз печатал новые значения, поэтому его 0,1 первый раз тогда 5,6, затем 10,11 и т. д. – spovell

0

эту строку:

FWRITE ($ ФХ, $ данных);

Вы пишете весь элемент массива перед файлом; это должно быть

fwrite ($ fh, $ list);

EDIT:

просто прямой доступ к элементу, если это только два;

$ fileinfo_array [0]; $ Fileinfo_array [1];

или вы можете использовать array_slice();

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