Check if item exists in array

Asked

Viewed 572 times

0

I have this object.

stdClass Object
(
    [assessoria_id] => 1
    [id] => 3
    [nome] => wagner.fillio
    [cpf] => 00000000000
    [login] => wagner.fillios
    [ramal] => 123
    [pin] => 123
    [reset_senha] => 
    [sistema] => 
    [ativo] => 1
    [email] => Array
        (
            [0] => stdClass Object
                (
                    [pessoa_id] => 3
                    [id] => 13
                    [email] => [email protected]
                    [observacao] => 
                    [preferencial] => 1
                    [ativo] => 1
                    [origem_dados_id] => 1
                    [crud] => R
                )

        )

    [unidade] => stdClass Object
        (
            [_empty_] => 
        )

    [view] => stdClass Object
        (
            [equipe] => 61 a 90
        )

)

And this function:

public function atualizar($where, $dados)
    {
        print_r($dados);        
        $operador = [
            'ope_nome'        => $dados->nome,
            'ope_cpf'         => $dados->cpf,
            'ope_login'       => $dados->login,         
            //'ope_senha'       => $dados->senha,           
            'ope_ramal'       => $dados->ramal,
            'ope_pin'         => $dados->pin,
            'ope_reset_senha' => $dados->reset_senha,
            'ope_ativo'       => $dados->ativo,
        ];

        $this->db->update($this->tb_operador, $operador, $where);
        return $this->db->affected_rows();
    }

I need to identify if in this object, there is the item $senha. I can do this?

public function atualizar($where, $dados)
    {
        print_r($dados);        
        $operador = [
            'ope_nome'        => $dados->nome,
            'ope_cpf'         => $dados->cpf,
            'ope_login'       => $dados->login,

            if(in_array($dados->senha, $dados)
            {
                'ope_senha'  => $dados->senha,  
            }

            //'ope_senha'       => $dados->senha,           
            'ope_ramal'       => $dados->ramal,
            'ope_pin'         => $dados->pin,
            'ope_reset_senha' => $dados->reset_senha,
            'ope_ativo'       => $dados->ativo,
        ];

        $this->db->update($this->tb_operador, $operador, $where);
        return $this->db->affected_rows();
    }
  • Utilize isset

  • I have tried and got this: Message: syntax error, Unexpected 'if' (T_IF), expecting ']', I know I have to use if out of the array, so I would have to repeat the $operator array, taking the $password item.

2 answers

1


Using isset

public function atualizar($where, $dados)
{
    if (!isset($dados->senha)) {
        return 'Falta o campo senha';
    }

    $operador = [
        'ope_nome'        => $dados->nome,
        'ope_cpf'         => $dados->cpf,
        'ope_login'       => $dados->login,         
        //'ope_senha'       => $dados->senha,           
        'ope_ramal'       => $dados->ramal,
        'ope_pin'         => $dados->pin,
        'ope_reset_senha' => $dados->reset_senha,
        'ope_ativo'       => $dados->ativo,
    ];

    $this->db->update($this->tb_operador, $operador, $where);
    return $this->db->affected_rows();
}

Or with Empty that will check if it is empty:

public function atualizar($where, $dados)
{
    if (empty($dados->senha)) {
        return 'Falta o campo senha';
    }

    $operador = [
        'ope_nome'        => $dados->nome,
        'ope_cpf'         => $dados->cpf,
        'ope_login'       => $dados->login,         
        //'ope_senha'       => $dados->senha,           
        'ope_ramal'       => $dados->ramal,
        'ope_pin'         => $dados->pin,
        'ope_reset_senha' => $dados->reset_senha,
        'ope_ativo'       => $dados->ativo,
    ];

    $this->db->update($this->tb_operador, $operador, $where);
    return $this->db->affected_rows();
}

It might be interesting to use Exceptions, so for example:

public function atualizar($where, $dados)
{
    if (empty($dados->senha)) {
        throw new Exception('Falta o campo senha');
    }

    $operador = [
        'ope_nome'        => $dados->nome,
        'ope_cpf'         => $dados->cpf,
        'ope_login'       => $dados->login,         
        //'ope_senha'       => $dados->senha,           
        'ope_ramal'       => $dados->ramal,
        'ope_pin'         => $dados->pin,
        'ope_reset_senha' => $dados->reset_senha,
        'ope_ativo'       => $dados->ativo,
    ];

    $this->db->update($this->tb_operador, $operador, $where);
    return $this->db->affected_rows();
}

And at the time of using:

try {
    $objeto->atualizar({
       ...  
    ));

    //... continua aqui se não falhar
} catch ($ee) {
    echo 'Erro: ',  $ee->getMessage(), "\n";
}

If you want to add the item just use it like this:

public function atualizar($where, $dados)
{
    $operador = [
        'ope_nome'        => $dados->nome,
        'ope_cpf'         => $dados->cpf,
        'ope_login'       => $dados->login,              
        'ope_ramal'       => $dados->ramal,
        'ope_pin'         => $dados->pin,
        'ope_reset_senha' => $dados->reset_senha,
        'ope_ativo'       => $dados->ativo,
    ];

    if (isset($dados->senha)) {   
        $operador['ope_senha'] = $dados->senha;
    }

    $this->db->update($this->tb_operador, $operador, $where);
    return $this->db->affected_rows();
}
  • If $data->password DOES NOT exist, then the $operator array should not contain the $password item, otherwise the $operator array MUST contain the $password item

  • @Wagnerfilho You DID NOT explain this in the question, anyway just adjust the IF by creating a ELSE!

  • right, I just wanted to avoid writing the array twice.

  • @Wagnerfilho is not necessary to write twice. I am editing the answer... Ready, edited reply.

  • 1

    Thanks. It worked out.

1

You can also use the isset thus:

public function atualizar($where, $dados)
{
    print_r($dados);

    $operador = [
        'ope_nome'        => $dados->nome,
        'ope_cpf'         => $dados->cpf,
        'ope_login'       => $dados->login,
        //'ope_senha'       => $dados->senha,           
        'ope_ramal'       => $dados->ramal,
        'ope_pin'         => $dados->pin,
        'ope_reset_senha' => $dados->reset_senha,
        'ope_ativo'       => $dados->ativo,
    ];

    if(isset($dados->senha)) {
        $operador['ope_senha']  => $dados->senha,  
    }

    $this->db->update($this->tb_operador, $operador, $where);
    return $this->db->affected_rows();
}

Thus, case $dados->senha exist, it will add the index "ope_password" in the array $operador

Browser other questions tagged

You are not signed in. Login or sign up in order to post.