为值创建值为[1]的新数组,为值创建值[2]

时间:2012-02-13 19:49:04

标签: php arrays multidimensional-array flat-file

我有一个保存为

的日志文件
{time} | {name} | {value1}
{time} | {name} | {value2}
{time} | {name2} | {value3}
{time} | {name3} | {value4}

{time}是“自Unix时代以来的秒数”中的时间戳

并且逐行写入日志文件,因此最新的日志行位于底部,

我正在尝试将值分类为php数组....

我们说

{time} | Steve | Pizza
{time} | Steve | Kebab
{time} | Steve | Burger
{time} | John | Kebab
{time} | John | Ice-Cream
{time} | Dave | Pizza
{time} | Derek | Ice-Cream
{time} | Derek | Fanta

我已经爆炸成数组$ lines

这是我可以用来获取变量....

echo $lines[0][1] . "," . $lines[0][2];  // this will print ' Steve,Pizza '
echo $lines[3][2];  // this will print ' Kebab '

我试图以某种方式使用'$ lines [$ x] [1]'作为数组键和'$ lines [$ x] [2]'作为数组值来编码数组,因此我可以调用:

print_r($new_array);

得到:

array
     (
  [Steve] => Pizza
          => Kebab
          => Burger
     )
     (
  [John] => Kebab
         => Ice-Cream
     )
     (
  [Dave] => Pizza
     )
     (
  [Derek] => Ice-Cream
          => Fanta
     )

这样做的原因是我需要显示一个看起来像这样的小桌子....

 _________________________________________
|       Steve       |      Pizza          |
|                   |      Kebab          |
|___________________|_____ Burger ________|
|       John        |      Kebab          |
|___________________|_____ Ice-Cream _____|
|______ Dave _______|_____ Pizza _________|
|       Derek       |      Ice-Cream      |
|___________________|_____ Fanta _________|

数组$ lines已经格式化,以删除超过24小时的所有“日志行”....

所以我认为我不需要限制数组键的数量{names}

提前感谢任何建议....已经为此尝试了所有合理的解决方案:咆哮:

2 个答案:

答案 0 :(得分:2)

没有完全测试,但请尝试:

$new = array();
foreach($lines as $line)
{
    $new[$line[1]][] = $line[2];
}
print_r($new);

由DJ-P.I.M.P编辑......

$new = array();
foreach($lines as $line)
{
$new[$line[1]][] = $line[2];
}
// print_r($new);


foreach($new as $key => $news) {

echo $key . "<br>";

foreach($news as $k => $v) {

echo $news[$k] . "<br>";

}
}

这确实很有问题,因为我的问题是...... Kudos,最初的想法是@Aaron:)

答案 1 :(得分:0)

在子数组中添加共享相同键的值的不同变体:

$result = array();
for ($lines as $line) {
    if (!isset($result[$line[1]])) {
        $result[$line[1]] = array();
    }
    $result[$line[1]][] = $line[2];
}