Lelio Faieta
Lelio Faieta

Reputation: 6673

cannot find value in array

I can't see where I am wrong with this code so I kindly ask for your help. I have two arrays:

Array (
    [0] => Array (
        [description] => Generali di Proprieta'
        [idmov] => 34
        [mov] => Manutenzioni
        [total] => 8000
    )
    [1] => Array (
        [description] => Generali di Proprieta'
        [idmov] => 35
        [mov] => Assicurazioni
        [total] => 6000
    )
    [2] => Array (
        [description] => Generali di Proprieta'
        [idmov] => 36
        [mov] => Cancelleria Postali
        [total] => 1850
    )
    [3] => Array (
        [description] => Generali di Proprieta'
        [idmov] => 37
        [mov] => Bancarie passive
        [total] => 700
    )
    [4] => Array (
        [description] => Generali di Proprieta'
        [idmov] => 38
        [mov] => Amministrazione
        [total] => 15000
    )
)

and

Array (
    [0] => Array (
        [center] => 8
        [caus] => 34
        [total] => 38175.04
    )
    [1] => Array (
        [center] => 8
        [caus] => 35
        [total] => 6132.00
    )
    [2] => Array (
        [center] => 8
        [caus] => 36
        [total] => 223.80
    )
    [3] => Array (
        [center] => 8
        [caus] => 37
        [total] => 114.70
    )
    [4] => Array (
        [center] => 8
        [caus] => 38
        [total] => 14625.07
    )
    [5] => Array (
        [center] => 8
        [caus] => 39
        [total] => 7450.48
    ) 

I use this function

function searchForId($id, $array) {
   foreach ($array as $key => $val) {
       if ($val['caus'] === $id) {
           return $key;
       }
   }
   return null;
}

to look in array B for each item of array A with this code:

for($i=0;$i<$length;$i++){
    if(searchForId($voce_bdg[$i]['idmov'], $voce_actual)){
        $key=searchForId($voce_bdg[$i]['idmov'], $voce_actual);
        $actual=$voce_actual[$key]['importo'];
        echo '<td class="report">'.number_format($actual,2,',','.').'</td>';
     }else{
        echo '<td class="report">0,00</td>';
    }
}

It works for every item like a charm except for the first item where it returns 0.

Where am I wrong??

Thanks in advance for your help! Lelio

Upvotes: 0

Views: 109

Answers (3)

Sutandiono
Sutandiono

Reputation: 1750

PHP treats the index 0 as a false. As such, if you find your result in index zero, it won't pass the if() statement you have.

Since your function returns null if no record found, why not try to check for null?

for($i = 0; $i < $length; $i++)
{
    // Use is_null() check below. If it is not null, it is found.
    // Also, instead of doing searchForId() twice, just do it once and check for the result.

    $key = searchForId($voce_bdg[$i]['idmov'], $voce_actual);

    if(! is_null ($key))
    {
        $actual = $voce_actual[$key]['importo'];
        echo '<td class="report">'.number_format($actual,2,',','.').'</td>';
    }
    else
    {
        echo '<td class="report">0,00</td>';
    }
}

Upvotes: 1

Bibear
Bibear

Reputation: 69

It does return something. It return 0 since the key is 0. But your if() interpret it as a "false"

change

if(searchForId($voce_bdg[$i]['idmov'], $voce_actual)){

with

if(searchForId($voce_bdg[$i]['idmov'], $voce_actual) != null){

Upvotes: 0

Peminator
Peminator

Reputation: 852

try replacing operator === for ==

Upvotes: 0

Related Questions