2013-12-01 2 views
0

я следовать массиву ($ 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); 
    } 
?> 

Но это не работает, никаких идей? Игнорируйте: мне нужно написать еще текст, потому что он говорит: похоже, что ваш пост в основном код

+0

В процессе циклизации, если вы найдете «Herren», просто пропустите цикл «продолжить»; или добавить продукт в новый массив и использовать его – sravis

+0

Пропустить цикл продолжить? Но мне нужно, чтобы он продолжал массив, содержащий тысячи продуктов. И создание нового массива без «Herren» в свойствах - это то, что я пытаюсь сделать oO – user3047382

ответ

1

array_filter выполняет итерацию для вас и возвращает отфильтрованный набор элементов.

Функция обратного вызова возвращает true, если элемент должен оставаться, и false, если он должен быть удален. json_encode преобразует весь массив в строку, strpos ищет строку Herren в любой строке этой строки. Поскольку вы не нуждаетесь в регулярном выражении, нет необходимости использовать preg_match, который медленнее, чем strpos.

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

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