二维数组的阵列搜索警告

时间:2014-05-03 23:46:53

标签: php arrays

我已经看过一些(可能不是全部)关于searchin数组的类似主题,但它似乎对我不起作用。

我对阵列不是很好,这可能是我问题的根源。

我从如下数据动态创建数组:

姓名|时间(仅限小时的日期)|一些其他列(此时我不关心其他列,只关注前两列) - 下面只是一个示例,数据看起来或多或少像这样:

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]数组中的重复值:

if(array_search($time,$member_array[$name])===FALSE)
    {
    $member_array[$name][] = $time;
    }
}

它确实有效,但后来我明白了:

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

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

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中,但我试图摆脱警告。我应该如何初始化Array变量来摆脱它呢?

2 个答案:

答案 0 :(得分:0)

你是对的,第一次调用时阵列不存在。因此,您必须检查数组是否存在,如果不存在则创建它。

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

答案 1 :(得分:0)

在运行第一次array_search()检查之前尝试初始化数组变量。如果没有看到你的其余代码,很难确切地说要做什么,但也许是这样的:

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