我已经看过一些(可能不是全部)关于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变量来摆脱它呢?
答案 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();