【发布时间】:2016-05-20 08:23:29
【问题描述】:
通过搜索社区和谷歌,我只能看到 array_search 松散搜索导致整数 0 等于字符串的问题。
但是在我的情况下,没有零,严格搜索似乎仍然没有帮助。
数组:
$data= array(
"13" => array(
"start" => array(
0 => "36000",
1 => "43200",
),
"end" => array(
0 => "43200",
1 => "50400",
),
),
"14" => array(
"start" => array(
0 => "36000",
1 => "43200",
),
"end" => array(
0 => "43200",
1 => "50400",
),
),
);
功能:
foreach ($data as &$area) {
foreach ($area['start'] as $key => &$start_time) {
if (($pos = array_search($start_time, $area['end'], true) !== false)) {
$area['end'][$pos] = $area['end'][$key];
unset($area['start'][$key]);
unset($area['end'][$key]);
}
}
}
想要的输出:
$data= array(
"13" => array(
"start" => array(
0 => "36000",
),
"end" => array(
0 => "50400",
),
),
"14" => array(
"start" => array(
0 => "36000",
),
"end" => array(
0 => "50400",
),
),
);
我得到的却是:
$data= array(
"13" => array(
"start" => array(
0 => "36000",
),
"end" => array(
0 => "43200",
),
),
"14" => array(
"start" => array(
0 => "36000",
),
"end" => array(
0 => "43200",
),
),
);
我打算用上面的函数实现的是将连续的时隙组合起来,可以看出,最后第一个匹配的开始时间是 $data[13]['start'][1] = 43200 ,它与位置 ..['end'][0] 匹配,因此我期望返回的 $pos 也是 0,但返回的 $pos 是 1 并且错误的元素被处理。
问题详解 $data 数组是动态的,并不总是这样。尽管可以在位置 0 清楚地找到 "end" 数组中匹配的 $start_time 值,但返回的 $pos 值却是 1。
已经为此苦苦挣扎了很长一段时间,无法找到错误,希望其他人会。
最好的,
阿拉里
【问题讨论】:
-
你能输入想要的输出吗?
-
@Frayne Konok:它应该做的是检查 $start_time 是否可以在 $area['end'] 数组中找到,如果没有,则什么也不做,但如果找到它, 将返回的键作为 $pos 变量在里面进行处理。但是由于 array_search 可以为找到的键返回 0 位置,所以我必须在它不为假时进行严格比较(当什么都没有找到时,array_search 返回值。
-
@Kr Bm:将尽快将所需的输出作为编辑
-
出于兴趣,您为什么使用
&$area和&$start_time作为引用而不是简单的值? -
我不明白,我做错了什么,为什么所有的反对票?我已经清楚地完成了我的研究并提供了样本数据..