Define a random return for a function

1

I'm creating a function that gets a return x from another function and wanted to test the possibilities to avoid errors.

$array = [1,2];
$i = 0;
foreach ($array as $value) {
    $retorno[$i] =  funcao();
    $i++;
}
echo "Conteudo do array: ";
echo var_dump($retorno);
echo "</br>";
function funcao(){
    return 'falhou' || NULL;
}
$valido = false === array_search(false , $retorno, false);
echo "Teste: ";
var_dump($valido);

I want to randomize this return, which can be a string type 'função falhou' or NULL .

Fiddle

    
asked by anonymous 16.12.2016 / 16:57

2 answers

3

By responding directly to your question, you can return a random value.

The solution below reorders the array randomly and returns the first item.

function funcao(){
    $result = array('falhou', NULL);
    shuffle($result);
    return $result[0];
}

Or something simpler, if it's just 2 values:

function funcao(){
    return rand(0,1) ? 'falhou' : NULL;
}
    
16.12.2016 / 18:08
2

My answer is based on your code and your question, but I would like to frighten you that I found the logic of the line that sets the $ variable variable too confusing.

I basically used the rand (int min, int max) function to sort 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);
    
16.12.2016 / 18:14