2015-11-07 2 views
2

В настоящее время я работаю над школьным проектом и не могу понять, как правильно взорвать и взорвать массив. Моя цель - добавить новых пользователей, уметь удалять пользователей и обновлять пользователей. Чтобы достичь этого, мне нужно правильно получить свою пару ключевых значений.implode и explode associative array

Спасибо

<?php 
class index { 

    function __construct(){} 

Мой CSV чтение результатов заключается в следующем

 
Array 
(
    [Email = [email protected]] => FirstName = fake_firstname 
) 
public function display() { 

     $filename = 'testfile.csv'; 
     $lines  = file($filename); 
     $data  = array(); 

     echo "<tr> 
     <th>Email</th> 
     <th>First</th> 
     <th>Last</th> 
     </tr><br>"; 
     foreach($lines as $info) { 
      list($key, $value) = explode(',', $info); 
      $result[$key] = $value; 

      echo "<pre>"; 
      print_r($result); 
      echo "</pre>"; 
     } 
    } 

    public function add($Fname, $Lname, $Email) { 
     $this->Fname = $Fname; 
     $this->Lname = $Lname; 
     $this->Email = $Email; 
     $this->person = array('Email'=>$this->Email,'FirstName' =>$this->Fname, 
     'LastName' =>$this->Lname); 
     $this->save($this->person); 

     print_r($this->person); 
    } 

    public function save($arr) { 
     $filename = 'testfile.csv'; 
     $myfile = fopen($filename, "a+") or die("Unable to open file!"); 
     foreach($arr as $key => $value){ 
      $new[] = $key.' = '.$value; 
      $final = implode(",", $new); 
     } 
     fwrite($myfile, $final."\r\n"); 

     fclose($myfile); 
    } 

Мой CSV сохранил результаты в следующем Email = [email protected],FirstName = fake_firstname,LastName = fake_lastname

public function form(){ 
     include('add.html'); 
    } 

} // close off class index 

?> 
+0

Почему вы не получаете содержимое файла csv в виде строки, используйте взорвать дважды, один раз с explode (",", $ CSVString), а затем для каждого вызова индекса другой взрыва с explode ("=", $ array [$ i]), и если это необходимо, аккуратно() вокруг второго взрыва, чтобы избавиться от пробелов в конце и начале. Если это трюк, я выложу его в качестве ответа, если не дайте мне знать :) – JRsz

+0

Я сделал следующее, и он сказал, что второй взрыв должен быть строкой. foreach ($ lines as $ info) { $ CSVString = explode (',', $ info); $ last = explode ('=', $ CSVString); echo "

"; print_r($last); echo "
"; – Royce

+0

см. Мой ответ ниже. Надеюсь, это вам поможет :) – JRsz

ответ

1

Почему бы вам не получить содержимое файла csv как строка, использование взорваться дважды, один раз с explode (",", $ CSVString), а затем для каждого вызова индекса другое взорваться с explode ("=", $ array [$ i]), и если это необходимо trim() вокруг второй взрывается, чтобы избавиться от пробелов в конце и начале. Обратите внимание, что второй взрываются является массивом, так что вы должны использовать

$email = trim(explode("=", $yourArray[0])[1]); 
$Fname = trim(explode("=", $yourArray[1])[1]); 
$Lname = trim(explode("=", $yourArray[2])[1]); 

Это очень компактный код создает три массива, один для каждой информации (почта, Fname, Lname) и непосредственно выбирает необходимую строку, обрежет его и помещает значение в переменную. Если вам нужна дополнительная помощь или объяснение, пожалуйста, дайте мне знать.

+0

Хорошо выглядит, поэтому, если я хочу отключить конкретного пользователя, используя ключ в качестве ключа, могу ли я сделать цикл через массив и если email == $ email unset myarray? – Royce

+0

Я действительно не понимаю, что вы хотите сделать ... Если ваш первоначальный вопрос был ответом, я был бы признателен за принятие ответа от вас :) Для вашего второго вопроса, пожалуйста, опишите его дальше или создайте новый. Если вы сделаете второй пост ссылкой здесь, я также могу проверить его. – JRsz

+0

Теперь мне нужно поместить кнопку редактирования рядом с дисплеем.Мне удалось поместить редактирование Href, передав $ e-mail, $ firstname и $ lastname и получив почтовый запрос в функции редактирования. Проблема в том, что информация о редактировании добавляется в нижнюю часть. Мне нужен способ заменить значение новым значением редактирования и переписать массив. Email \t \t Первый Последний [email protected] \t \t test_firstname test_lastname Редактировать [email protected] test_firstname test_lastname Редактировать – Royce

0

Вы также можете взорваться каждую строку раз

<?php 

$line = 'Email = [email protected],FirstName = fake_firstname,LastName = fake_lastname'; 

$parts = explode(',', str_replace(array(' = ', 'Email', 'FirstName', 'LastName'), '', $line)); 

// email = $parts[0] 
// firstname = $parts[1] 
// lastname = $parts[2] 
?> 
1

Очевидно, вы находитесь в контроле структуры файла .csv. Поэтому я говорю, используйте ключи как заголовки в .csv. personFile.csv должен начинаться только с заголовками в нем

personFile.csv

Email,First Name,Last Name 

только с этой линией в нем

<?php 
class index { 

    function __construct(){} 

    public function display() { 
     $filename = 'personFile.csv'; 
     $lines  = file($filename); 
     $data  = array(); // store the contents of the file in an associative array for future use? 

     // the first row is the header 
     $headers = $lines[0]; 
     $countHeaders = count($headers); // store the count for future use 
     echo " 
     <tr> 
      <th>" . implode("</th><th>",explode(",",$headers)) . "</th> 
     </tr>"; 

     // array_slice($lines, 1) will return all the lines in $lines except for the first line 
     foreach(array_slice($lines,1) as $row) { 
      echo " 
     <tr> 
      <td>" . implode("</td><td>",explode(",",$row)) . "</td> 
     </tr>"; 
     } 
    } 
    public function add($Fname, $Lname, $Email) { 
     $this->Fname = $Fname; 
     $this->Lname = $Lname; 
     $this->Email = $Email; 
     $this->person = array('Email'=>$this->Email,'FirstName' =>$this->Fname, 
     'LastName' =>$this->Lname); 
     $this->save($this->person); 

     print_r($this->person); 
    } 

    public function save($arr) { 
     $filename = 'personFile.csv'; 
     $myfile = fopen($filename, "a+") or die("Unable to open file!"); 

     $final = "\r\n" . implode(',',$arr); 

     fwrite($myfile, $final); 

     fclose($myfile); 
    } 
    public function form(){ 
     include('add.html'); 
    } 
    //return true if the person was found and removed. else return false 
    public function removePersonUsingEmail($emailToRemove) { 
     $filename = 'personFile.csv'; 
     $lines  = file($filename); 

     // the first row is the header 
     $headers = $lines[0]; 
     $emailColumn = array_search("Email",$headers); 

     $lines = array_slice($lines, 1); 
     // array_slice($lines, 1) will return all the lines in $lines except for the first line 
     foreach($lines as $rowNum => $row) { 
      if($row[$emailColumn] === $emailToRemove) { 
       unset($lines[$rowNum]); 
       $final = implode(",",$headers); 
       foreach($lines as $row) { 
        $final .= "\r\n" . implode(",",$row); 
       } 

       $myfile = fopen($filename, "w") or die("Unable to open file!"); 
       fwrite($myfile, $final); 
       fclose($myfile); 
       return true; 
      } 
     } 

     return false; 
    } 
} // close off class index 
?> 
0
list($fname, $lname) = explode(' ', $N1,2); 

Может кто-нибудь объяснить, что делает "2" означает в этом?

+1

Если у вас есть новый вопрос, пожалуйста, спросите его http://stackoverflow.com/questions/ask. Не ставьте вопрос в комментариях. Другим разумным был флаг и он удаляется. – ketan