3

連想配列を検索したいのですが、値が見つかったら、配列のその部分を削除します。

これが私の配列のサンプルです:

    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
        )
}

私がやりたいことは、配列の値16295C0C51D8318C2を見つけて、AppServiceその部分を削除することです。したがって、たとえば、そのコードが上記の配列で実行される場合、ロジックはその配列内のすべてに一致するため、配列全体が空になります。

これまでの私のコードは次のとおりです。

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

4 に答える 4

4

array_filter役立ちます(http://php.net/manual/en/function.array-filter.php

$yourFilteredArray = array_filter(
    $this->schs_raw,
    function($var) {
        return $object['AppService'] != "16295C0C51D8318C2"
    }
);
于 2013-11-03T20:44:58.207 に答える
3

このようにしてみてください:

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]);
    }
}
于 2013-11-03T20:39:30.890 に答える
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
  }
}
于 2013-11-03T20:44:13.947 に答える
0

新しい配列を作成してみませんか? 一致するものが見つからない場合は、インデックスを新しい配列に追加します...見つかった場合は追加しないでください。新しい配列には、必要なデータのみが含まれます。

于 2013-11-03T20:39:56.937 に答える