у меня два вопроса. 1. у меня есть файл в котором хранится список строк в формате 1:2 как скаделать что бы при добавлении в этот файл строки, небыло повторов 2. требуется переменной присвоить порядковый номер (1, 2, 3...) и так же запись ведется в файл
Alekzzzander не использовать для этого файлы. А если хочется костыль - то придется считывать весь файл (или построчно или полностью) и сверять есть ли такая строка или нет 2) http://php.net/array
Нене это в админ-панели) ... а с другой стороны, как вывести сообщение, что информация добавлена? если условием иф резалт=тру выводи "информация добавлена" но если редирект будет стоять в 0 мс то его никто не заметит, верно?
Юзай get. типа редирект так: <meta http-equiv='refresh' content='0,страница_формы.php?result=true'> а в страницу формы вставить <?if($_GET['result']){?><script>alert('Информация добвалена');</script><?}?>
1)кодировки не совпадают... сравни какая у тебя кодировка в phpMyAdmin и в таблице 2)информация о порядке записей не сохраняется без ключа
Здравствуйте, требуется перекодировать все значения массива POST и затем вернуть эти значения обратно в POST, для одномерными массива делаю так: Code: foreach ($_POST as $a=>$b) $c[$a]=iconv('utf-8','windows-1251',$b); $_POST=$c; А как сделать, если у меня массив $_POST - многомерный масив вида: Code: $_POST['a']='1'; $_POST['a']['c']='1-2'; $_POST['a']['b']['c']['d']='1-1-1-1'; и т.д
как вывести все элементы массива-списка без ключей? Раньше работал PHP: $n = 0; while($unik[$n] != false) { echo "$unik[$n] <br>"; $n++; } но когда элементов стало в массиве окола 800+ он начал выводить лишь ~треть мб условие вайла поменять? этот же массив print_r выводит полностью, так что ошибка не в нём.
а str_replace('\r\n\r\n','\r\n',$file) не катит? В качестве альтернативы: $strings=file('путь к файлу'); for($i=0;$i<count($string);$i++){ if(trim($strings[$i])!='\r\n'){$result.=$string[$i];} } $file=fopen('путь к файлу'); fputs($file,$result); fclose($file); Не тестил, но должно вроде работать.
М.б. какой то элемент (не последний) таки равен false? Попробуй PHP: for($n=0;$n<count($unik[$n]);$n++) { echo "$unik[$n] <br>"; }
PHP: <?php $unik = array(1, 2, false, 3, 4, false, 5, 6, 7); //массив $unik = array_filter($unik, 'delete_false'); //удаляем элементы, которые равны false foreach($unik as $value) //выводим значения элементов { echo $value.'<br>'; } function delete_false($elem) { return $elem !== false; } ?>
Например, так: PHP: <?php function charsetDecode(&$array) { foreach ($array as $k => $v) { if (is_array($array[$k])) { charsetDecode($array[$k]); } else { $array[$k] = iconv('utf-8', 'windows-1251', $array[$k]); } } } charsetDecode($_POST); ?>
как это осуществить? у меня получалось пока только с каждой строчкой лично сравнивать а мне надо что бы сравнило сначало со всеми строками и потом если нет такого то добавило в файл
PHP: <?php $fh = fopen("file.txt","r"); while(!feof($fh)) $strings[] = fgets($fh); $unique = true; foreach($strings as $key => $value) if($value == $new_string) { $unique = false; break; } fclose($fh); $fh = fopen("file.txt","a+"); if($unique) fwrite($fh,$new_string); ?> либо сравнение сразу со всем содержимым PHP: $file = file_get_contents("file.txt"); if(strpos($file,$new_string)) echo "строка не уникальна";
Alekzzzander PHP: $f = fopen('file.txt','r+'); $unique = true; $new_string = 'some string'; // Не обязательно читать весь файл, ищем только до первого вхождения while($row = fgets($f, 4096)) if (trim($row)==$new_string) {$unique = false; break;} if ($unique) fwrite($f, $new_string); SHiNiGaMi у меня есть смутное сомнение, что первый вариант работать не будет: a+ помещает указатель в конец файла