$items1 = ['apple', 'tree', 'juice'];
$items2 = ['apple', 'tree'];
$items3 = ['apple'];
// loop
If ($items[i].containsOnly['apple'])
{
// do something..
}
In the simplified example above I want to get the array that matches the given item. Is there a method available similar to 'containsOnly'? Or what is the best way to do this?
5 Réponses :
Vous pouvez utiliser la méthode contient . Depuis la documentation Laravel :
$collection = $items1->merge($items2)->merge($items3)
if($collection->contains('apple') && $collection->count() === 1){
// it contains apple
}
Je pense que l'exemple est assez simple. Dans votre exemple, cela ressemblerait à quelque chose comme:
$collection = collect(['name' => 'Desk', 'price' => 100]);
$collection->contains('Desk');
// true
$collection->contains('New York');
// false
Non testé mais vous avez l'idée derrière.
Il ne semble pas vérifier si l'article est le seul de la collection
@RomainB. Vous souhaitez vérifier si c'est le seul de la collection? Je n'ai pas compris. Je mettrai à jour la réponse en conséquence. MODIFIÉ: en gros, il vous suffit de vérifier si le nombre d'éléments à l'intérieur de la collection est 1 et s'il contient apple
Non, mais ça semble être la question ici ^^
$ collection-> count () ne serait-il pas égal à 3 dans cette instance car il n'itère pas sur chaque tableau de la collection?
@thisiskelvin dans ce cas précis ouais. J'ai laissé un commentaire dans la publication des OP parce que ce qu'il entend par uniquement apple n'est pas très clair et il a 3 tableaux contenant d'autres éléments
@Thedude J'ai supposé qu'il voulait dire de chacun des tableaux, il n'y avait qu'une seule valeur et la valeur était apple .
Je pense qu'il veut les tableaux avec, et uniquement avec, la pomme
Associez votre logique à count :
function containsOnly($a, $v)
{
return count($a) === 1 && array_values($a)[0] === $v;
}
Cela garantira que vous n'avez qu'un seul élément et que la valeur est égale à ce que vous recherchez.
Remarque: L'utilisation de array_values ici est de réinitialiser tous les index afin que nous puissions nous assurer que [0] est là où la valeur sera. Au lieu de la variante array_values , vous pouvez utiliser in_array si vous préférez cela.
//If the array has the only item present
if(in_array('apple',$item) && count($item)==1)
{
//Do Something
}
Vous pouvez créer une collection de groupes d'articles, -> filter () par la condition, puis exécuter le code sur -> chaque groupe d'articles qui a passé la condition.
pré> XXX
essayez ceci:
$items=array_merge($items1,$items2,$items3);
if (in_array("apple", $items)){
echo "success";
}
Cette réponse retournera vrai avec les éléments 1 et 2 du tableau uniquement, non? Cela ne devrait être vrai qu'avec les éléments de tableau3. (Les éléments en tant qu'arguments et les éléments du tableau cible doivent correspondre en nombre et en valeur).
Vous pouvez vérifier si l'élément est dans la collection et la taille de la collection aussi
Juste pour ajouter, vous devriez reformuler votre question car vous parlez de
collectionmais vous nous donnez des tableaux