配列値の配列フィルタ

sujara:

私は、アレイからオプション値を検索し、それを使用することができますどのようにオプションの名前を検索するための仕事をして、このコードを持っています。

$productspp ='[{
    "id": 4674388066436,
    "title": "1st march",
    "options": [{
        "id": 6046836162692,
        "product_id": 4674388066436,
        "name": "Size",
        "position": 1,
        "values": ["12", "24", "36"]
    }, {
        "id": 6067871875204,
        "product_id": 4674388066436,
        "name": "z",
        "position": 2,
        "values": ["blue", "green"]
    }, {
        "id": 6067871907972,
        "product_id": 4674388066436,
        "name": "Material",
        "position": 3,
        "values": ["silk", "cotton"]
    }],
}, {
    "id": 4674394325124,
    "title": "2nd march",
    "options": [{
        "id": 6046844190852,
        "product_id": 4674394325124,
        "name": "Title",
        "position": 1,
        "values": ["Default Title"]
    }],
}, {
    "id": 4679851704452,
    "title": "3rd marchhh",
    "options": [{
        "id": 6053112545412,
        "product_id": 4679851704452,
        "name": "Title",
        "position": 1,
        "values": ["Default Title"]
    }]
}]';

$array = json_decode($productspp,1);

    $filter_name555 ='options';
    $dummytstt ='values';
    $filter_value=  blue;


 $expected = array_filter($array, function($el) use ($filter_name555, $dummytstt, $filter_value) {

    return ( stripos($el[$filter_name555][0][$dummytstt], $filter_value) !== false ); 
}

}); 

ユーザーは、option_value検索し、それがユーザー検索シルクならば、それはそれは他のその製品をしませリストする必要があり、この場合にはそのための製品を一覧表示する必要があると一致した場合

オプション名のためには、striposは、それが文字列であることを期待として、オプションの値のために、それは動作しません動作しますが、ここではデータの中には、配列です。

私たちは、フィルターにもin_arrayしようとしたが、それはまた仕事しませんでした

私たちは12または24または36または青や緑のようなものを検索するとき、それは、JSONのこの部分をリストする必要があります。私はこの製品を意味し、私は上記与えているコードは同じですが、オプション名のために行います。uがオプション値が配列であることがわかります。それは私のコードが失敗しているので、複数の値を持つことができます。

{
    "id": 4674388066436,
    "title": "1st march",
    "options": [{
        "id": 6046836162692,
        "product_id": 4674388066436,
        "name": "Size",
        "position": 1,
        "values": ["12", "24", "36"]
    }, {
        "id": 6067871875204,
        "product_id": 4674388066436,
        "name": "z",
        "position": 2,
        "values": ["blue", "green"]
    }, {
        "id": 6067871907972,
        "product_id": 4674388066436,
        "name": "Material",
        "position": 3,
        "values": ["silk", "cotton"]
    }],
}
ジャック:

彼らは異なっ一致させる必要があるので、あなたは、配列値や定期的な値を区別する必要があります。

あなたができることの一つは、ただ一つの要素の配列に値の他の種類を強制し、値が配列の場合のために、書き込みロジックである、と。

$key = 'options';
$attr = 'values';
$search = 'blue';

$expected = array_filter($array, function($el) use ($key, $attr, $search) {
  $values = $el[$key];
  if (is_array($value)) {
    $values = array_column($value, $attr);
  } else {
    $value = array($value);
  }

  foreach ($value as $body) {
    foreach ((array)$body as $contents) {
      if (stripos($contents, $search) !== false) {
        return true;
      }
    }
  }
  return false;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=351288&siteId=1