二维数组搜索警告


Array Search warning for two dimensional Array

我已经看过一些(可能不是全部)关于搜索数组的类似主题,但它似乎不适合我。

我不太擅长数组,这可能是我问题的根源。

我动态地从数据创建数组,看起来像这样:

Name | Time(只有小时的日期)| Some-Other-Columns(此时我不关心其他列,只关心前两个)-下面只是一个例子,数据看起来或多或少是这样的:

Name1 | 05-01-01 04| other values
Name1 | 14-02-03 02| other values
Name1 | 14-02-03 02| other values
Name1 | 14-02-03 03| other values
Name2 | 13-09-09 07| other values
NameX...

可以看到Name+Time的值是不相同的,这是问题的核心。出于"原因",我需要这样做。我可以使用单独的查询来获得单独的不同值,只是为了这一步-但我想用我在这个过程中所拥有和学习的东西来解决它。

当我逐行浏览数据时,我调用:$member_array[$name][] = $time;

结果是:

Array
(
[Name1] => Array
    (
        [0] => 14-04-26 17
        [1] => 14-04-26 17
    )
[Name2] => Array
    (
        [0] => 14-05-01 18
        [1] => 14-05-01 19
        [2] => 14-05-02 00
        [3] => 14-05-02 00
        [4] => 14-05-03 09
        [5] => 14-05-03 13
        [6] => 14-05-03 15
        [7] => 14-05-03 15
    )

)

我注意到值重复,所以我添加了数组搜索来检查$member_array[$name] Array:

中的重复值
if(array_search($time,$member_array[$name])===FALSE)
    {
    $member_array[$name][] = $time;
    }
}

它实际上是有效的,但是我得到了这个:

警告:array_search() [function。/home/bud-net/ftp/praca_dyplomowa/ale/members_time.php第43行中第二个参数的数据类型错误

警告:array_search() [function。/home/bud-net/ftp/praca_dyplomowa/ale/members_time.php第43行中第二个参数的数据类型错误

Array
(
[Name1] => Array
    (
        [0] => 14-04-26 17
    )
[Name2] => Array
    (
        [0] => 14-05-01 18
        [1] => 14-05-01 19
        [2] => 14-05-02 00
        [3] => 14-05-03 09
        [4] => 14-05-03 13
        [5] => 14-05-03 15
    )
)

所以我假设当我第一次调用搜索一个新名字(在第一个值被分配给$member_array[Name1]之前,后来分配给$member_array[Name2])它还不是一个数组,所以PHP正在发出警告。现在您可以看到结果是正确的-所有重复的值都没有添加到Array中,但是我试图消除警告。我应该如何初始化数组变量来摆脱它?

你是对的,数组在第一次调用时不存在。所以你需要检查数组是否存在如果不存在就创建它

if(!isset($member_array[$name])) { //if the array doesn't exist create it
    $member_array[$name] = array($time);
}
elseif(array_search($time,$member_array[$name])===FALSE) { //if the array does exist search it
        $member_array[$name][] = $time;
    }
}

在运行第一个array_search()检查之前尝试初始化数组变量。如果没有看到剩下的代码,很难确切地说出该做什么,但也许可以这样做:

if (!isset($member_array[$name]))
    $member_array[$name] = array();