2015-12-04 3 views
2

Как удалить всю строку из массива? Когда кнопка удаления нажата, она должна удалить всю строку.Удалить всю строку из массива в php

мой массив выглядит следующим образом:

$liste[0][0] = email-user1 
$liste[0][1]= password-user1 
$liste[1][0] = email-user2 
$liste[1][1]= password-user2 

Так что, если я удалить пользователя один, то user2 должен просто занять место от user1 (который должен просто исчезнуть).

if (isset($_GET['delete'])){ 
    $id=key($_GET['delete']); 
    for ($i = 0; $i < count($liste); $i++){ 
     if ("$i"=="$id"){ 
      unset($liste[$id][0]); 
      unset($liste[$id][1]); 
      unset($liste[$id][2]); 

     } 
     else{ 

      } 

    } 

обновление
Я использую array_splice($liste, $id, 1); сейчас, но каждый раз, когда я пытаюсь сохранить его в файл я получаю сообщение об ошибке: implode(): Invalid arguments passed. Для сохранения в файл, я использую следующую функцию:

function saveDataToFile($fileName, $liste){ 
    $file=fopen($fileName,"w"); 
    for ($i = 0; $i < count($liste); $i++) { 
     $zArray=$liste[$i]; 
     $zeile=implode("|", $zArray); 
     if(strlen($zeile) > 0){ 
      $zeile=$zeile."\r\n"; 
      fwrite($file, $zeile); 
     } 
    } 
    fclose($datei); 
} 
+4

Просто незадан первый ключ: 'снят с охраной ($ Liste [$ ID ]); ' – jeroen

+0

Массивы не имеют« линий », они содержат элементы. Если вы просто хотите удалить элемент с помощью ключа 0, то почему 'unset ($ liste [$ id])' не работает? – arkascha

ответ

0

$liste[0][0], $liste[0][1] и $liste[0][2] в реальном ничем ином, чем значении array(value, value, value) (внутренний массив), который назначен на $liste[0] (внешний массив)

отмена этого (внешнее) значения массива $liste[0] достаточно:

unset($liste[$id]); 

Если вы заботитесь о ключах этого массива (я вижу вас петле из 0..n), вам необходимо проиндексировать ваш массив с помощью:

$liste = array_values($liste); 

Это сделает ваш массив ведет себя больше как массивы обычно делает в других языках программирования

Эффективной практики заключается в использовании Еогеаспа а не для. В этом случае вам не нужно индексировать:

for ($liste as $key=>$value){ 
    if ("$key"=="$id"){ 
     unset($liste[$key]); 
    } 

Но в любом случае вам не придется перебрать массив только для нахождения ключа. Достаточно сделать это:

if (isset($liste[$id])) { /* optional: check if the key exists */ } 

unset($liste[$id]); 
1

Вы можете использовать array_splice() метод:

array_splice($liste, $id, 1); 
+0

Возможно ли, что все еще есть ошибка. Я обновил сообщение с помощью моей функции, чтобы сохранить его в поле, но я всегда получаю сообщение об ошибке при имплате. – aha364636

+0

Если вы еще не решили его, попробуйте применить второй параметр метода implode, например: '$ zeile = implode (" | ", (array) $ zArray);' и дайте мне знать. – wiredolphin

1

Попробуйте следующий код:

$liste[0][0] = "email-user1"; 
$liste[0][1]= "password-user1"; 
$liste[1][0] = "email-user2"; 
$liste[1][1]= "password-user2"; 
$liste[2][0] = "email-user3"; 
$liste[2][1]= "password-user3"; 

unset($liste[1]); // say you want to delete this row 
$new_arr = $liste; 
unset($liste); 
$i=0; 
foreach($new_arr as $value){ 
    $liste[$i] = $value; 
    $i++; 
} 
+0

Если вы хотите сбросить ключи массива, вы также можете использовать 'array_values ​​()' после того, как вы отмените элемент, что сильно очистит ваш код. – jeroen

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