My answer is based on your code and your question, but I would like to stress that I found the line logic that arrow the variable $valid very confusing.
I basically used the function Rand(int min, int max) to draw numbers and return 'failed' or NULL randomly.
<?php
function funcao()
{
// sorteia um número $n entre 1 ou 2 aleatoriamente
$n = rand (1 , 2);
// se o $n sorteado for igual a 1, retorna 'falhou'
// se o $n sorteado for igual a 2, retorna NULL
if($n==1)
{
return 'falhou';
}
else
{
return NULL;
}
}
$array = [1,2];
$i = 0;
foreach ($array as $value)
{
$retorno[$i] = funcao();
$i++;
}
echo "Conteudo do array: ";
echo var_dump($retorno);
echo "</br>";
// ATENÇÃO: A lógica dessa linha abaixo é muito confusa e acho que vc deveria reescrevê-la para algo mais inteligível.
// A função array_search retorna o q foi procurado, ou false se não achar o que procurou.
// O terceiro parâmetro com valor false diz para não comparar tipo*
// Testei aqui e:
// $valido será true se ambos os elementos em retorno forem iguais a 'falhou'
// $valido será false em demais casos, isso pq null é considerado um equivalente de false quando não se verifica tipo
// se o terceiro parâmetro estivesse como true:
// $valido sempre seria true pq array_search sempre iria falhar e retornaria false que é === false e a comparação retorna true.
$valido = false === array_search(false , $retorno, true);
echo "Teste: ";
var_dump($valido);
I will vote on your answer because I found more succinct, about 20 mins after posting the question had reached the same conclusion as yours, randomizing the return, I waited for more answers to see if you had something more direct, like
return 'falhou' or NULL
– MarceloBoni