Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Замена элементов массива новыми
 
 автор: method   (05.06.2005 в 02:51)   письмо автору
 
 

Привет!

Допустим есть Файл в котором франится инфа о пользователях примерного содержания:

Сергей|г.Москва|sergey@mail.ru|8901765459
Дмитрий|г.Сургут|diman_surgut@pochta.ru|46789
Елена|г.Сочи|lena@list.ru|89007665456
Олеся|г.Новый Уренгой|lesy@mail.ru|8126544456
Никита|г.Екатеринбург|nikitos@mail.ru|876454678
......


Как заменить место жительства юзера Олеси на новое???

   
 
 автор: cheops   (05.06.2005 в 12:30)   письмо автору
 
   для: method   (05.06.2005 в 02:51)
 

Это можно осуществить при помощи следующего скрипта
<?php 
  
// Имя файла
  
$filename "file.txt";
  
// Помещаем содержимое файла в
  // массив $content, каждый элемент
  // котого соотвествует одной строке
  
$content file($filename);
  
// В цикле ищем строку с именем Олеся
  
foreach($content as $line)
  {
    
// Разбиваем строку на части
    
$arr explode("|",$line);
    
// Меняем местожительства
    
if($arr[0] == "Олеся")
    {
      
$arr[1] = "Москва";
      
// Собираем строку по новой
      
$line implode("|",$arr);
    }
    
// Уничтожаем массив $arr
    
unset($arr);
    
// Формируем новое содержимое файла
    
$buffer .= $line;
  }
  
// Перезаписываем файл
  
$fd fopen($filename,"w");
  
fwrite($fd,$buffer);
  
fclose($fd);
?>

   
 
 автор: method   (06.06.2005 в 02:52)   письмо автору
 
   для: cheops   (05.06.2005 в 12:30)
 

Спасиба cheops =)

Всё таки пришлось читать файл в массив и потом уничтожать все записи,
а уже потом вставлять обновленную запись поновому......

array_push есть такая функция, я мудрил мудрил с ней чёто пока не выходит.....

   
 
 автор: Sfinks   (06.06.2005 в 04:15)   письмо автору
 
   для: cheops   (05.06.2005 в 12:30)
 

Только одна поправочка.....
Программа будет работать быстрее, если сначала проверить, нужная ли это строка, а затем ее обрабатывать, и если не использовать цикл foreach.....
Т.е. примерно вот так...
<?php

  $filename 
"file.txt";           // Задаем имя файла
  
$content file($filename);       // Помещаем содержимое файла в массив $content,
                                    // каждый элемент котого соотвествует одной строке
  
$fstr "Олеся";                  // Определяем искомую строку
  
$fstrlen strlen($fstr);         // и ее длину
  
$cont_co sizeof($content);      // Определяем количество строк в файле

  
for($i 0$i $cont_co$i++)  // Ищем в цикле строку с нужным именем
  
{ if(substr($content[$i],0,$fstrlen) == $fstr)   // Если это искомая строка
    
$arr explode("|",$line);                   // Разбиваем строку на части
      
$arr[1] = "Москва";                          // Меняем место жительства
      
$line implode("|",$arr);                   // Собираем строку по новой
      
unset($arr);                                 // И уничтожаем массив $arr
    
}
    
$buffer .= $line;               // Формируем новое содержимое файла
  
}
  
$fd fopen($filename,"w");       // Перезаписываем файл
  
fwrite($fd,$buffer);
  
fclose($fd);

?>

   
 
 автор: method   (06.06.2005 в 12:10)   письмо автору
 
   для: Sfinks   (06.06.2005 в 04:15)
 

CHEOPS спасибо ещё раз :)
: Sfinks'у тоже спасибо :)

то чего я хотел я почти добился,
а почти потомочту не получается у меня сделать одну
немаловажную деталь, вот есть файл юзеров, на страничке zamen.php
в полях тэга SELECT отображаются ники юзеров(берутся из файла users.txt см. 1 пост)
надо сделать чтоб при выборе ника юзера, в поле типа input добавлялось
текущее место жительства этого юзера, а там уж мы сами будем смотреть
редактировать или нет ;)

файл zamen.php:


<!doctype html public "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
  <title>Обновление места жительства</title>
</head>
<body><form action="zamen.php" method="POST" name="zamena">
<input type="hidden" name="action" value="">
<select name="users" >
<?php
Error_Reporting
(0);
$users $_POST['users'];
$text $_POST['text'];
$view=file("users.txt");
$co sizeof($view);
 for(
$i=0;$i<$co;$i++){
  list(
$name,$city,$mail,$tel) = split('[|]'trim($view[$i]));
if(
$name!==""){
print 
"<option value='".$name."'>".$name."</option>";}
}
fclose($view);
?>
</select>
<input type="text" name="text" value="<? print $city?>">
<input type="submit" name="submit" value="Обновить"></form>
</body>
</html>
<?
if(isset($_POST['action']))
  {
if(
$text==""){$submit false;}
if(
$text!==""){
$content file("users.txt");
foreach(
$content as $line){
$arr explode("|",$line);
        if(
$arr[0] == $users)
    {
      
$arr[1] = $text;
            
$line implode("|",$arr);
    }
        unset(
$arr);
        
$buffer .= $line;
 }
$fd fopen("users.txt","w");
  
fwrite($fd,$buffer);
  
fclose($fd);}
}
?>




Спасибо за внимание.

   
 
 автор: cheops   (06.06.2005 в 12:37)   письмо автору
 
   для: method   (06.06.2005 в 12:10)
 

Это надо на JavaScropt писать... так как действие уже переместилось на машину пользователя, а PHP работает только на сервере.

   
 
 автор: method   (15.06.2005 в 03:36)   письмо автору
 
   для: cheops   (06.06.2005 в 12:37)
 

А как удалить полностью строку если пользоваться одним из выше написаным скриптом?

   
 
 автор: cheops   (15.06.2005 в 09:15)   письмо автору
 
   для: method   (15.06.2005 в 03:36)
 

Решение можно посмотреть в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3884

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования