我在另一个foreach中有一个foreach。这个foreach的原因是我希望得到一个包含IP的多个数组,以及来自IP的所有日期......这有点复杂......我需要格式化的日期:
Y-m-d,H:m:s
这很有效,但我的多变量的结束输出并不像我预期的那样。
类似于foreach的第一部分的输出是这样的:
Array
(
[0] => Array
(
)
[1] => Array
(
[ip] => 72.xx.xx.xx
[all_dates] => Array
(
[0] => 12/Oct/2015:00:30:15
[1] => 12/Oct/2015:00:30:24
[2] => 12/Oct/2015:00:30:49
[3] => 12/Oct/2015:00:30:57
[4] => 12/Oct/2015:00:30:57
[2] => Array
(
[ip] => 85.xx.xxx.xx
[all_dates] => Array
(
[0] => 12/Oct/2015:00:32:19
[1] => 12/Oct/2015:00:32:33
[2] => 12/Oct/2015:00:32:33
[3] => 12/Oct/2015:00:34:30
[4] => 12/Oct/2015:00:38:59
[5] => 12/Oct/2015:00:39:20
)
)
首先..我不知道为什么[0] =>数组为空或更好为什么[1] =>数组不在[0]处
第二件事是我需要所有日期格式化。我在第二个foreach循环中做到了这一点,但在此之后,多个没有得到正确的输出。那么它还没有真正的产出......
这是我的代码(更新):
$diff_ips = array_unique($ip_array);
$ip_with_date = [];
foreach ($diff_ips as $ip) {
$get_dates = shell_exec("grep $ip $path" . $inputs['domain'] . ".log | awk '{print $4}'");
$new_date = str_replace('[', '', $get_dates);
$array_date = explode("\n", $new_date);
array_pop($array_date);
foreach ($array_date as &$dates) {
$dates[11] = ' ';
$dates = date('Y-m-d, H:m:s', strtotime(str_replace('/', '-', $dates)));
}
}
$ip_with_date[] = [
'ip' => $ip,
'all_dates' => $array_date
];
echo "<pre>";
print_r($ip_with_date);
echo "<pre>";
更新代码后的当前输出:
Array
(
[0] => Array
(
[ip] => 66.xx.xxx.xx
[all_dates] => Array
(
[0] => 2015-10-12, 01:10:36
[1] => 2015-10-12, 01:10:46
[2] => 2015-10-12, 01:10:06
)
)
)
第一个foreach循环结束(结束=第二个循环开始的地方),给出你在上面看到的输出。
但是这个日期并没有很好地形成。这就是为什么我有第二个foreach循环。在
$dates[11] = ' ';
行,是因为后面的行有11.字符的问题。这就是为什么我把它设置为&#39;:&#39;到&#39; &#39;
在我定义$ formated_date变量时,日期看起来很完美。但当然它不会覆盖多个数组中的日期,这是我的问题。
我真的尽力而为,但还没有找到解决方案。最后的输出应如下所示:
Array
(
[0] => Array
(
[ip] => 72.xx.xx.xx
[all_dates] => Array
(
[0] => 2015-10-12 00:30:15
[1] => 2015-10-12 00:30:20
...
[1] => Array
(
[ip] => 85.xx.xxx.xx
[all_dates] => Array
(
[0] => 2015-10-12 00:30:40
[1] => 2015-10-12 00:31:05
...
)
)
正如我所说,它有点复杂。
解决。
工作代码:
$diff_ips = array_unique($ip_array);
$ip_with_date = [];
foreach ($diff_ips as $ip) {
$get_dates = shell_exec("grep $ip $path" . $inputs['domain'] . ".log | awk '{print $4}'");
$new_date = str_replace('[', '', $get_dates);
$array_date = explode("\n", $new_date);
array_pop($array_date);
foreach ($array_date as &$dates) {
$dates[11] = ' ';
$dates = date('Y-m-d H:m:s', strtotime(str_replace('/', '-', $dates)));
}
$ip_with_date[] = [
'ip' => $ip,
'all_dates' => $array_date
];
}
答案 0 :(得分:1)
第一个问题:
定义
<input type="text" id="txt1">
表示 - 将$ip_with_date[] = [];
视为数组并向其添加空数组。这是您在密钥$ip_with_date
将其替换为:
0
第二个问题:
所以你有$ip_with_date = []; // no [] here
。你期待什么?它只是一个变量,你什么都不做。以某种方式分配或做某事。但我建议你这样做:
$format_date
答案 1 :(得分:-1)
请尝试以下代码
{{1}}