2010-02-07 20 views
27

Devo davvero fare questo per resettare un array ??elimina tutti i valori da un array mantenendo i tasti intatti

foreach ($array as $i => $value) { 
    unset($array[$i]); 
} 

EDIT:

questo ha più senso, come il precedente è equivalente a $array=array();

foreach ($array as $i => $value) { 
    $array[$i]=NULL; 
} 
+1

'array_map (function() {return '';}, $ array)' – caw

+0

** ** Vedi anche: domande e risposte per Python http: // equivalente StackOverflow. it/questions/22991888 – dreftymac

risposta

12

Definire questa funzione e lo chiamano quando ne hai bisogno:

function erase_val(&$myarr) { 
    $myarr = array_map(create_function('$n', 'return null;'), $myarr); 
} 

// It's call by reference so you don't need to assign your array to a variable. 
// Just call the function upon it 
erase_val($array); 

Questo è tutto!

+6

Mi dispiace, ma questa è di gran lunga la risposta peggiore pubblicata - 'create_function()' è fondamentalmente 'eval()' e sicuramente non dovrebbe essere usato per risolvere un problema così banale come questo. Inoltre, una funzione per questo è anche completamente esagerata. IMO, questa non dovrebbe essere la risposta accettata. –

0

impostata sarebbe eliminare la chiave, è necessario impostare il valore null o 0 secondo il vostro requisito

Example

5

non esiste alcuna funzione build-in per ripristinare una matrice a poco è chiavi.

Un'alternativa sarebbe tramite una richiamata e array_map():

$array = array('a' => 'foo', 'b' => 'bar', 'c' => 'baz'); 

Con la funzione di regolare callback

function nullify() {} 
$array = array_map('nullify', $array); 

O con un lambda con PHP < 5,3

$array = array_map(create_function('', ''), $array); 

O con lambda dal PHP 5.3

$array = array_map(function() {}, $array); 

In tutti i casi var_dump($array); uscite:

array(3) { 
    ["a"]=> NULL 
    ["b"]=> NULL 
    ["c"]=> NULL 
} 
+0

Sì, sembra buono. +1 –

+0

@stereofrog Giusto. Ho cambiato le funzioni. Non che sia sbagliato con il corpo e la discussione, ma perché aggiungere confusione ... Grazie. – Gordon

+0

questo è un po 'cool :) – markus

0

solo fare questo:

$arrayWithKeysOnly = array_keys($array); 

http://php.net/manual/en/function.array-keys.php

EDIT: Affrontare commento:

Ok, quindi fare questo:

$arrayWithKeysProper = array_flip(array_keys($array)); 

http://www.php.net/manual/en/function.array-flip.php

EDIT: In realtà a pensarci, che probabilmente non funzionerà neanche.

+0

Ciò restituirebbe un array con chiavi che sono i valori e non è ciò che l'OP vuole. Vuole mantenere le chiavi e solo eliminare i valori – Gordon

+0

'array_flip' non lo farà, perché i valori dell'array sarebbero in ordine crescente, ad es. 'a' => 0, 'b' => 1 e così via – Gordon

+0

sì, direi che devi farcela. –

40
$keys = array_keys($array); 
$values = array_fill(0, count($keys), null); 
$new_array = array_combine($keys, $values); 

ottenere le chiavi

Ottenere una serie di valori nulli con lo stesso numero di elementi

combinarle, utilizzando i tasti e le chiavi ed i valori nulli come i valori

Come commenti suggerire, questo è facile da PHP 5.2 con array_fill_keys

$new_array = array_fill_keys(array_keys($array), null); 
+6

+1, queste funzioni sono molto utili. A partire da PHP 5.2 c'è persino 'array_fill_keys()'. – Inshallah

+1

+1, entrambe le soluzioni di cui sopra sono più veloci, array_combine è il migliore tra i due. – FMCorz

+0

Questo è esattamente ciò di cui ho bisogno. Grazie per averlo condiviso .. –

1

Non capisco la domanda abbastanza bene, ma il tuo esempio

foreach ($array as $i => $value) { 
    unset($array[$i]); 
} 

è equivilent a

$array = array(); 
+0

Sì, è vero, I tasti vengono eliminati anche ... Volevo una funzione incorporata per fare questo: foreach ($ array come $ i => $ valore) { $ array [$ i] = NULL; } – jfoucher

2
foreach($a as &$v) 
    $v = null; 

Il ragionamento dietro l'impostazione di un elemento dell'array a null è che un array deve avere un valore per ogni chiave, altrimenti una chiave non ha senso. Questo è il motivo per cui è chiamato una chiave: è usato per accedere a un valore. Un valore nullo sembra una scelta ragionevole qui.

avvolgerla in un procedimento [riutilizzabile]:

function array_purge_values(&$a) 
{ 
    foreach($a as &$v) 
     $v = null; 
} 

Tenere presente però che la versione PHP partendo da valori 5.3 passa a funzioni per riferimento predefinita, ovvero la commerciale precedente variabile argomento nella dichiarazione di funzione è ridondante. Non solo, ma riceverai un avviso che la nozione è deprecata.

+0

facile, bello e pulito – Gordon

+1

Facile sì, ma non è riutilizzabile. Codice come questo puzza. Scusate. – aefxx

+0

@aefxx Quindi basta avvolgerlo in una funzione e inquinare l'ambito globale con l'odore di appena un'altra funzione di area utente – Gordon

0

Perché non creare un array con i tasti richiesti e impostarlo su variabile quando si desidera ripristinarlo?

function resetMyArr(&$arr) 
{ 
$arr = array('key1'=>null,'key2'=>null); 
} 
18

gamma di riempimento con vecchie chiavi e valori nulli

$array = array_fill_keys(array_keys($array), null)

+2

Non è chiaro dalla domanda di OP se questo è effettivamente ciò che intendeva o voleva - è quello che volevo, quindi +1 per fornire la soluzione più semplice/più breve possibile. –

0

Questo è un argomento piuttosto vecchio, ma da quando ho fatto riferimento ad esso prima di venire su con la mia soluzione per un risultato più preciso, quindi, quindi, condividerò con voi questa soluzione.

Il risultato desiderato era annullare tutti i valori, mantenendo i tasti e per cercare ricorsivamente l'array anche per i sotto-array.

ricorsivamente SET multi-livello di valori di matrice a NULL:

function nullifyArray(&$arrayData) { 

    if (is_array($arrayData)) { 
    foreach ($arrayData as $aKey => &$aValue) { 
     if (is_array($aValue)) { 
     nullifyArray($aValue); 
     } else { 
     $aValue = null; 
     } 
    } 
    return true;  // $arrayData IS an array, and has been processed. 
    } else { 
    return false; // $arrayData is NOT an array, no action(s) were performed. 
    } 

} 

E qui è in uso, insieme a PRIMA e DOPO uscita dei contenuti Array.

codice PHP per creare un multilivello-array, e chiamare il) funzione nullifyArray (:

// Create a multi-level array. 
$testArray = array(
    'rootKey1'    => 'rootValue1', 
    'rootKey2'    => 'rootValue2', 
    'rootArray1'   => array(
     'subKey1'   => 'subValue1', 
     'subArray1'   => array(
      'subSubKey1' => 'subSubValue1', 
      'subSubKey2' => 'subSubValue2' 
     ) 
    ) 
); 

// Nullify the values. 
nullifyArray($testArray); 

PRIMA CHIAMATA nullifyArray():

Array 
(
    [rootKey1] => rootValue1 
    [rootKey2] => rootValue2 
    [rootArray1] => Array 
     (
      [subKey1] => subValue1 
      [subArray1] => Array 
       (
        [subSubKey1] => subSubValue1 
        [subSubKey2] => subSubValue2 
       ) 

     ) 

) 

DOPO CHIAMATA nullifyArray():

Array 
(
    [rootKey1] => 
    [rootKey2] => 
    [rootArray1] => Array 
     (
      [subKey1] => 
      [subArray1] => Array 
       (
        [subSubKey1] => 
        [subSubKey2] => 
       ) 

     ) 

) 

Spero che aiuti qualcuno/qualcuno e Grazie a tutti coloro che hanno già risposto alla domanda.

1

Se è necessario annullare i valori di un array associativo si può camminare l'intero array e fare un callback per impostare i valori null in tal modo continua ad avere le chiavi

array_walk($ar,function(&$item){$item = null;}); 

Nel caso in cui se hai bisogno di annullare l'intero serie solo riassegnare a svuotare una

$ar = array(); 
Problemi correlati