2017-08-10 5 views
0
$alllist = array(
    "link" => $link, 
    "title" => $title, 
    "imgurl" => $imgURL, 
    "price" => $price, 
    "mname" => $merchantname, 
    "description" => $description, 
); 

$all[] = $alllist; 

Je suis en train de filtrer le tableau $allmname est une certaine valeur, disons 'Amazon. Comment je fais ça?PHP array_filter

J'ai essayé, mais cela n'a pas fonctionné:

reset($all); 

$all_filter = array_filter($all, function(filter) use ($all) { 
    $key = key($all); 
    next($all); 
    return key($all) === 'Amazon'; 
}); 
+0

Veuillez mettre à jour votre question avec des exemples plus explicites d'entrée, de sortie attendue et de sortie réelle. En outre, essayez d'expliquer plus clairement ce que vous entendez par «n'a pas fonctionné», car il existe plusieurs façons qui pourraient arriver. –

Répondre

0
$all[] = array("link"=> 1, "title"=> 2, "imgurl"=> 3, 
"price"=>4, "mname"=>'Amazon', "description"=>5); 


$all[] = array("link"=> 1, "title"=> 2, "imgurl"=> 3, 
"price"=>4, "mname"=>'Facebook', "description"=>5); 

$filtered = array_filter($all, function($item) { 
return $item['mname'] === 'Amazon'; 
}); 

var_dump($filtered); 
+0

J'ai fatigué cela ne fonctionnait pas comme prévu: $ all_filter = array_filter ($ all, fonction ($ item) { return $ item ['mname'] === $ marchand; }); – apptikka

+0

Quel est votre code différent du mien? Veuillez le coller, car je suis sûr que cela fonctionnerait à 100%. Vérifiez la sensibilité des chaînes de caractères (essayez de .et '===' '==' car vous vérifiez aussi les types.) Vérifiez '' 'strtolower ($ item ['mname']) == strtolower ($ merchant); '' ' –

0

array_filter() itérera sur la array pour vous. Vous n'avez pas besoin d'appeler reset() ou next().

Vous devriez regarder le array_filter() documentation pour plus d'informations et d'exemples.

$all_filter = array_filter($all, function($item) { 
    return $item['mname'] === 'Amazon'; 
}); 
1

Je pense que ce que vous voulez:

$name = 'Amazon'; 

$all_filter = array_filter($all, function (array $item) use ($name) { 
    return array_key_exists('mname', $item) && $item['mname'] === $name; 
}); 
0

On dirait que vous le rendre plus complexe qu'il doit être. Le rappel devrait juste retourner une valeur booléenne. Si vous ne voulez pas coder en dur la valeur que vous souhaitez filtrer (par exemple, 'Amazon'), vous pouvez le passer dans le rappel avec use.

$filter_value = 'Amazon'; 

$all_filter = array_filter($all, function($item) use($filter_value) { 
    // without use($filter_value), $filter_value will be undefined in this scope 
    return $item['mname'] == $filter_value; 
}); 

retour l'expression booléenne $item['mname'] == $filter_value; déterminera quels éléments ont mname des valeurs qui correspondent à la valeur du filtre, et ces éléments seront inclus dans le résultat.

+0

essayé ceci mais n'a pas fonctionné: – apptikka