duandangqin0559 2018-02-09 17:08
浏览 13
已采纳

PHP搜索多重阵列功能始终给出TRUE值

I am a newbie about this php stuff. The function below always returns true. Can you explain how this happens? My purpose was to write a general code for searching in a multiarray however I came across this problem and wondered how this can be. Kind Regards.

<?php

    function existInMultiArray ($demand, $multiarray)
    {
        foreach ($multiarray as $key => $val)
        {
            foreach($val as $key1 => $val1)
            {
                foreach($val1 as $key2 => $val2)
                {
                    if ($key == $demand)
                    {
                        return TRUE;
                    }
                    if($key1 == $demand)
                    {
                        return TRUE;
                    }
                    if ($key2 == $demand)
                    {
                        return TRUE;
                    }
                }   
            }
        }
    return FALSE;
    }


    $demand = 'asdf';
    $multiarray = array
(
    0 => array ('A' => array( 'B' => 'C')),

    1 => array ('D' => array ('E' => 'F')),

    2 => array ('G' => array ('H' => 'J')),

    3 => array ('K' => array ('L' => 'M')),

    4 => array ('N' => array ('O' => 'P')),

    5 => array ('R' => array ('S' => 'T'))
);

var_dump(existInMultiArray($demand, $multiarray)); exit;
  • 写回答

1条回答 默认 最新

  • douyuan1049 2018-02-09 17:19
    关注

    This is because $key, $key1, $key2 have integer datatype and $demand have string datatype. If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.

    In PHP, the empty string, and the string "0" will both be equal to zero with the equality operator (==).

    and in your case, you use === with strict type checking. It means it will check data type as well as value.

    <?php
    $demand = 'asdf';
    $multiarray = array
        (
        0 => array ('A' => array( 'B' => 'C')),
        1 => array ('D' => array ('E' => 'F')),
        2 => array ('G' => array ('H' => 'J')),
        3 => array ('K' => array ('L' => 'M')),
        4 => array ('N' => array ('O' => 'P')),
        5 => array ('R' => array ('S' => 'T'))
    );
    
    function existInMultiArray ($demand, $multiarray)
    {
        foreach ($multiarray as $key => $val)
        {
            foreach($val as $key1 => $val1)
            {
                foreach($val1 as $key2 => $val2)
                {
                    if ($key === $demand)
                    {
                        return TRUE;
                    }
                    if($key1 === $demand)
                    {
                        return TRUE;
                    }
                    if ($key2 === $demand)
                    {
                        return TRUE;
                    }
                }   
            }
        }
        return FALSE;
    }
    
    var_dump(existInMultiArray($demand, $multiarray)); exit;
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大