2017-05-27 1 views
1

Ich habe eine Datei dieses Array enthält:Wert aus dem Array in einer anderen Datei entfernen?

stafflist.php:

<?php return array (
    2 => '76561198046199189', 
    1 => '76561198063610282', 
    3 => '76561198042145797', 
);?> 

Aber ich versuche einen Wert aus dem Array aus einer anderen Datei (remove.php) I‘zu entfernen Ich habe alles versucht, von einer Funktion, die den Index vom Array bekommt, nur unset(array['id']) zu verwenden, aber nichts funktioniert.

Hier ist mein jüngste Versuch: (innen remove.php)

function removeFromArray($steamid, &$array) { 
    $index = array_search($steamid, $array); 
    if($index !== false) { 
    unset($array[$index]); 
    } 
    return $array; 
} 

$roster = require dirname(__FILE__)."/../../../stafflist.php"; 
if(in_array($_GET['steamid'], $roster)) { 
    $output = removeFromArray($_GET['steamid'], $roster); 
    file_put_contents(dirname(__FILE__)."/../../../stafflist.php", '<?php return ' . var_export($output, true) . ';'); 
} 

Sorry, wenn dies eine wirklich einfache Frage ist, habe ich gerade an dieser Stelle stundenlang versuchen.

+0

'$ _GET [ 'SteamID']' sind die Werte im Array oder den Schlüssel? Warum nicht einfach durch das Array iterieren und prüfen, ob der Wert gleich '$ steamid' ist, und ihn löschen? 'foreach ($ array als $ key => $ value) if ($ steamid == $ value) unset ($ array [$ key]);' – MasterOdin

+0

Verwenden Sie einfach 'array_filter()' auf dem Array: https: // 3v4l .org/PIWYj Sie brauchen eigentlich keine Funktion, um diese wirklich einfache Sache zu machen. Schalten Sie Fehlerberichterstattung ein und debuggen Sie, indem Sie das '$ roster' überprüfen, um sicherzustellen, dass es das hat, was Sie wollen. Sie können in diese Datei mit dem Benutzer des Servers schreiben usw. –

+0

Sie brauchen auch nicht und sollten das Schließen nicht einschließen '?>' PHP-Tag. –

Antwort

0

Falscher Weg, dies zu tun, verwenden Funktionen den Wert zurück und array_key_exists diesen Schlüssel in Array suchen:

stafflist.php:

<?php 
function getArray(){ 
return array (
    2 => '76561198046199189', 
    1 => '76561198063610282', 
    3 => '76561198042145797', 
); 
} 
?> 

Aber ich versuche einen Wert aus zu entfernen Dieses Array aus einer anderen Datei (remove.php) Ich habe alles ausprobiert, um eine Funktion zu erstellen, die den Index vom Array ableitet, um nur unset (array ['id']) zu verwenden, aber nichts funktioniert.

Hier ist meine jüngste Versuch: (innen remove.php)

include_once "/../../../stafflist.php"; 
function removeFromArray($steamid, &$array) { 
    $index = array_search($steamid, $array); 
    if($index) { 
    unset($array[$index]); 
    } 
//you don't need the return because you already referenced the argument as a reference to the array sended by the user, so all your interactions inside this function will go to main array as well 
} 

$roster = getArray(); 
if(in_array($_GET['steamid'], $roster)) { 
    removeFromArray($_GET['steamid'], $roster); 
    file_put_contents(dirname(__FILE__)., '<?php return ' . var_export($roster, true) . ';'); 
} 
+0

Warum ist eine Funktion hier besser als die Rückkehr von der Datei? –

+0

Wenn die Datei eine Ini-Datei oder etwas ähnliches ist, ist es in Ordnung. Im schlimmsten Fall ist nur das in einer Variablen geladene Array auch in Ordnung. Aber setze Return in ein Array und file_get_contents macht es verrückt nach mir, ernsthaft. – calexandre

+0

Es ist völlig in Ordnung. So soll 'var_export()' funktionieren. Das Umhüllen einer Funktion bringt unnötige Komplexität mit sich (Sie müssen die Funktion dann aufrufen). Es tut nicht weh, aber es wird nicht benötigt und wird das Problem des OP nicht lösen (ich stelle mir vor). –

Verwandte Themen