2012-02-19 45 views
1

我有關聯數組的PHP數組以下格式的PHP數組刪除對象:從陣列

array(1) { 
    [0]=> 
    { ["name"]=> "Steve Jobs" 
    ["email"]=> "[email protected]" } 
} 

我很新的PHP,但我想要做的是搜索特定電子郵件,並且如果找到,則從該數組中刪除該特定數組(名稱&電子郵件對)(不會在陣列中留下被刪除的對象所在的空白空間)。

我在這裏發現了這個代碼,它搜索一個條目但返回一個數組。我將如何修改這個刪除找到的數組?

function search($array, $key, $value) 
{ 
    $results = array(); 

    if (is_array($array)) 
    { 
     if (isset($array[$key]) && $array[$key] == $value) 
      $results[] = $array; 

     foreach ($array as $subarray) 
      $results = array_merge($results, search($subarray, $key, $value)); 
    } 

    return $results; 
} 

回答

3

像這樣的事情?

function delete_user(&$arr, $name){ 
    for($i = count($arr)-1; $i >= 0; $i--){ 
     if($arr[$i]["name"] == $name){ 
      unset($arr[$i]); 
     } 
    } 
} 

&$arr告訴PHP通過參考數組傳遞,因此它可以從函數被修改,否則,這將是通過按值。

+0

是的,我認爲這可能工作..雖然我不需要使用'strcmp'來比較字符串,或者'=='也能工作嗎? – Snowman 2012-02-19 03:34:33

+0

你可以在PHP中用'=='比較字符串 – raser 2012-02-19 03:38:32

+0

我很確定這段代碼不能正確工作。如果我有兩個結果是數組中的連續元素,並且刪除了第一個元素,這將會覆蓋第二個元素。 – mc10 2012-02-19 05:46:23

0

必須使用unset以除去元素,並使用in_arrayarray_search方法從數組中搜索的元素。從PHP手冊

unset($array[0]); 

樣品(array_search)

function array_key_index(&$arr, $key) { 
    $i = 0; 
    foreach(array_keys($arr) as $k) { 
     if($k == $key) return $i; 
     $i++; 
    } 
} 
+0

那麼他們會超過1個條目,比如30多個名稱,電子郵件對。我想搜索一個特定的並刪除它 – Snowman 2012-02-19 03:12:24

+0

我需要知道如何找到索引.. – Snowman 2012-02-19 03:17:38

-3

剛剛發現數組索引,和

未設置(陣列(鍵));

這並不表明陣列

+0

是的,但我會如何找到索引.. – Snowman 2012-02-19 03:15:14

+0

<?php $ array = array('Tires'=> 100 ,'油'=> 10,'火花塞'=> 4); foreach($ array as $ key => $ value){ echo'Key ='。$ key。'
'; echo'Value ='。$ value'。
'; }>> – 2012-02-19 03:34:30

+0

<?php $ array = array(0 =>'blue',1 =>'red',2 =>'green',3 =>'red'); $ key = array_search('green',$ array); // $ key = 2; $ key = array_search('red',$ array); // $ key = 1; ?> – 2012-02-19 03:35:51

0

我相信有一個小問題raser的答案。我試圖評論它,但是我不能,因爲我沒有50的聲望。

讓我知道你是否同意:count($arr)返回數組中的元素數量。他使用遞減的for循環,除了數組的索引從0開始,並且其循環在達到0之前結束,因此該數組的第一個元素從不被搜索。我相信正確的代碼會是這樣的:

function delete_user(&$arr, $name){ 
    for($i = count($arr) - 1; $i >= 0; $i--){ 
     if($arr[$i]["name"] == $name){ 
      unset($arr[$i]); 
     } 
    } 
} 

謝謝!