数组如果包含值,则取消设置

时间:2013-12-01 17:27:05

标签: php arrays unset

我得到了关注数组($ json_output):

array(3) {
  ["ProductsSummary"]=>
  array(4) {
    ["Records"]=>
    int(500)
    ["TotalRecords"]=>
    int(5720)
    ["TotalPages"]=>
    int(12)
    ["CurrentPage"]=>
    int(2)
  }
  ["Products"]=>
  array(500) {
    [0]=>
    array(10) {
      ["ProductId"]=>
      int(1323819499)
      ["ShopId"]=>
      int(1856)
      ["ProductName"]=>
      string(21) "Fossil Creole JF84757"
      ["Deeplink2"]=>
      string(0) ""
      ["Brand"]=>
      NULL
      ["Manufacturer"]=>
      string(6) "Fossil"
      ["Distributor"]=>
      NULL
      ["EAN"]=>
      string(13) "4048803717479"
      ["Keywords"]=>
      NULL
      ["Properties"]=>
      array(3) {
        [0]=>
        array(2) {
          ["PropertyName"]=>
          string(12) "DeliveryTime"
          ["PropertyValue"]=>
          string(1) "5"
        }
        [1]=>
        array(2) {
          ["PropertyName"]=>
          string(17) "MerchantArtNumber"
          ["PropertyValue"]=>
          string(8) "85145452"
        }
        [2]=>
        array(2) {
          ["PropertyName"]=>
          string(6) "gender"
          ["PropertyValue"]=>
          string(5) "Damen"
        }
      }
    }
    [1]=>
    array(10) {
      ["ProductId"]=>
      int(1323819505)
      ["ShopId"]=>
      int(1856)
      ["ProductName"]=>
      string(16) "SANSIBAR Armband"
      ["Deeplink2"]=>
      string(0) ""
      ["Brand"]=>
      NULL
      ["Manufacturer"]=>
      string(8) "Sansibar"
      ["Distributor"]=>
      NULL
      ["EAN"]=>
      NULL
      ["Keywords"]=>
      NULL
      ["Properties"]=>
      array(3) {
        [0]=>
        array(2) {
          ["PropertyName"]=>
          string(12) "DeliveryTime"
          ["PropertyValue"]=>
          string(1) "5"
        }
        [1]=>
        array(2) {
          ["PropertyName"]=>
          string(17) "MerchantArtNumber"
          ["PropertyValue"]=>
          string(8) "85189719"
        }
        [2]=>
        array(2) {
          ["PropertyName"]=>
          string(6) "gender"
          ["PropertyValue"]=>
          string(5) "Herren"
        }
      }
    }

我需要取消设置属性中包含'Herren'的所有产品,所以我尝试了:

<?php
foreach($json_output["Products"] as & $bla)
$check = $bla["Properties"][0]["PropertyValue"] . $bla["Properties"][1]["PropertyValue"] . $bla["Properties"][2]["PropertyValue"];
if (preg_match('/Herren/',$check))
    {
    unset($bla);
    }
?>

但它不起作用。

1 个答案:

答案 0 :(得分:1)

array_filter为您迭代并返回一组经过滤的元素。

如果要保留元素,则回调函数返回true;如果要删除元素,则返回false。 json_encode将整个数组转换为字符串,strpos在该字符串中的任何位置查找字符串Herren。由于您不需要正则表达式,因此不需要使用比strpos慢的preg_match。

$array['Products']=array_filter($array['Products'], 'removeHerren');

function removeHerren($array){
    return strpos(json_encode($array), 'Herren')===false;
}