在数组中找不到值

时间:2013-10-21 15:26:11

标签: php 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
    )
)

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
    ) 

我使用此功能

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

使用以下代码在数组B中查找数组A的每个项目:

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>';
    }
}

除了第一个返回0的项目外,它适用于魅力之类的每个项目。

我错在哪里?

提前感谢您的帮助! Lelio

3 个答案:

答案 0 :(得分:1)

PHP将索引0视为false。因此,如果您在索引为零的情况下找到结果,则不会传递您拥有的if()语句。

由于如果找不到记录,您的函数会返回null,为什么不尝试检查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>';
    }
}

答案 1 :(得分:0)

尝试将运算符===替换为==

答案 2 :(得分:0)

确实会有所回报。它返回0,因为键为0.但是你的if()将其解释为“false”

变化

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

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