2
votes

Array reduction return boolean dans la variable

Comment puis-je retourner un type booléen dans une variable? J'ai le code:

$imageRes = array_reduce(['image', 'image1', 'image2'], function ($carry) {
    return in_array($carry, ['image1', 'image2']);
});

J'ai besoin de return dans imageRes un type booléen: true / false, si l'un des éléments de ['image1', 'image2'] est dans ['image', 'image1', 'image2'] . Comment puis-je le faire?


10 commentaires

Qu'essayez-vous d'accomplir?


@Eddie J'ai besoin de renvoyer le résultat de in_array dans la variable $ imageRes


Oui, mais quelle est la logique? Essayez-vous de vérifier si l'élément 0 est le même avec l'élément 1 ou 2?


@Eddie Ouais. J'ai besoin de vérifier image1 , image2


pourquoi pas $ a [0] === $ a [1] || $ a [0] === $ a [2] ?


@Eddie je peux le faire et j'aime ça. Mais comment je peux renvoyer le résultat vrai / faux dans $ imageRes


Oui, $ imageRes = $ a [0] === $ a [1] || $ a [0] === $ a [2];


@Eddie ahh non .. Je peux avoir plusieurs valeurs dans le tableau .. Je peux avoir 100 images en position aléatoire


mais vous voulez seulement vérifier le premier élément contre le 99?


@Eddie Non. Je veux vérifier la valeur = image1, image2, je peux et vérifier l'image5


3 Réponses :


3
votes

Utilisez array_intersect () au lieu de array_reduce () , comptez le résultat et convertissez-le en booléen. S'il n'y a pas d'intersections, le count () sera nul, donc un booléen false . S'il y a au moins une valeur qui se croise, le count () sera supérieur à un et tout nombre différent de zéro converti en booléen sera true .

bool(true)

Sortie :

$imageRes = (bool)count(array_intersect(['image1', 'image2'], ['image', 'image1', 'image2']));


6 commentaires

Je n'ai pas besoin de retour de tableau dans $ imageRes Je n'ai besoin que de retour vrai / faux.


Vous voulez donc que ce soit true si un seul des éléments du tableau est dans le plus petit tableau?


Oui. Vous avez raison ... j'ai besoin de retourner vrai si l'élément du tableau a été trouvé


Voir ma réponse révisée.


Pourquoi pas (bool) array_intersect (['image1', 'image2'], ['image', 'image1', 'image2']); ? Pourquoi avons-nous besoin d'utiliser count ?


Vous pouvez réellement vous en passer, car un tableau avec des valeurs est la vérité.



1
votes

Si vous avez juste besoin de savoir si l'un des éléments est dans les deux tableaux, utilisez array_intersect () , comptez le résultat et transtypez en booléen ( !! )

$ref_array = ['image1', 'image2'];
$array = ['image', 'image1', 'image2'];
$imageRes = !!count(array_intersect($array, $ref_array));
var_dump($imageRes);


1 commentaires

Vous pouvez également y parvenir en faisant ! Array_diff () - il y a de nombreuses façons d'arriver à Rome .. ;-)



1
votes

Une solution possible avec array_reduce serait comme ceci:

$imageRes = array_reduce(
    ['image', 'image1', 'image2',], 
    function($carry, $item) {
        return $carry || in_array($item, ['image1', 'image2']);
    },
    false //Initial value is false
);


0 commentaires