filtro de matriz para valores de matriz

sujara:

tengo este código que hace el trabajo para buscar en nombre de la opción ¿cómo puedo utilizarlo para buscar el valor de opción de matriz.

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

}); 

si el usuario busca valor_opción y que coincide, entonces debe listar ese producto por lo que en este caso si búsquedas de los usuarios de seda, entonces debe listar ese producto otra cosa no

para el nombre de la opción funciona de valor de la opción no funciona como stripos esperan que sea cadena, pero aquí en los datos es la matriz.

También intentamos in_array de filtro, pero que también no funcionaba

cuando buscamos algo como 12 o 24 o 36 o azul o verde, entonces debe listar esta parte de JSON. Me refiero a este producto y el código que he dado anteriormente hace lo mismo pero por nombre de opción. u puede ver que el valor de la opción es matriz. puede tener más de uno valora lo que mi código está fallando.

{
    "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"]
    }],
}
Jack:

Es necesario distinguir entre un valor de matriz o el valor normal, ya que tiene que ir acompañado de otra manera.

Una cosa que podría hacer es la lógica de escritura para si un valor es una matriz, y luego forzó a ningún tipo de valor en una matriz de un solo elemento.

$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;
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=351292&siteId=1
Recomendado
Clasificación