2013-11-03 72 views
0

我想搜索一個關聯數組,當我找到一個值時,刪除數組的那一部分。刪除關聯數組的一部分

這裏是我的陣列的樣本:

Array 
(
    [0] => Array 
     (
      [id] => 2918 
      [schoolname] => Albany Medical College 
      [AppService] => 16295C0C51D8318C2 
     ) 

    [1] => Array 
     (
      [id] => 2919 
      [schoolname] => Albert Einstein College of Medicine 
      [AppService] => 16295C0C51D8318C2 
     ) 

    [2] => Array 
     (
      [id] => 2920 
      [schoolname] => Baylor College of Medicine 
      [AppService] => 16295C0C51D8318C2 
     ) 
} 

我想要做的就是找到在AppService價值16295C0C51D8318C2然後刪除陣列的一部分。因此,例如,如果代碼要在上面的數組上運行,那麼由於邏輯匹配該數組中的所有內容,因此它是整個數組中的空白。

這裏是我到目前爲止的代碼:

  foreach($this->schs_raw as $object) { 
       if($object['AppService'] == "16295C0C51D8318C2") { 
        unset($object); 
       } 
     } 
+0

您試圖取消設置foreach循環的局部變量。但是你打算修改原始數組的內容。 – mario

+0

試試參考,以便不使用複製 –

回答

2

嘗試這樣的:

foreach ($this->schs_raw as &$object) { 
    if($object['AppService'] == "16295C0C51D8318C2") { 
     unset($object); 
    } 
} 

最後:

foreach ($this->schs_raw as $k => $object) { 
    if($object['AppService'] == "16295C0C51D8318C2") { 
     unset($this->schs_raw[$k]); 
    } 
} 
+0

謝謝。那樣做了。什麼是&符號用於?我從來沒有見過它。 –

+1

@Richard:http://php.net/manual/en/language.references.php –

+0

http://php.net/manual/en/language.references.pass.php – speccode

0

爲什麼不創建一個新的陣列?如果未找到匹配項,請將索引添加到新數組中...如果找到,請不要添加它。你的新陣列將只包含你想要的數據。

+0

想象一下,數組的使用方式太多了在應用程序中執行一次,並且應該執行一個邏輯,在這個數組將被修改的地方 –

2

試試這個:

foreach($this->schs_raw as $key=>$object) { 
    if($object['AppService'] == "16295C0C51D8318C2") {  
    unset($this->schs_raw[$key]); // unset the array using appropriate index  
    break; // to exit loop after removing first item 
    } 
} 
-1

像這樣的事情?

<?php 

$array = [ 
    0 => [ 
     'id'   => 2918, 
     'schoolname' => 'Albany Medical College', 
     'AppService' => '16295C0C51D8318C2' 
    ], 
    1 => [ 
     'id'   => 2919, 
     'schoolname' => 'Albert Einstein College of Medicine', 
     'AppService' => '16295C0C51D8318C2' 
    ], 
    2 => [ 
     'id'   => 2920, 
     'schoolname' => 'Baylor College of Medicine', 
     'AppService' => '16295C0C51D8318C2' 
    ] 
]; 

foreach ($array as $key => $value) { 
    if ($value['AppService'] === "16295C0C51D8318C2") { 
     unset($array[$key]); 
     break; 
    } 
} 

echo '<pre>'; 
print_r($array); 
+1

這看起來和問題中發佈的內容完全相同,這對於OP來說不起作用。 –

+0

編輯完成後仍然出錯。 'unset($ key)'不會刪除數組元素。 –

+0

我的錯,很抱歉,現在運行良好。 – guest459473