【问题标题】:create new array with value[1] for key and value[2] for value用 value[1] 为 key 和 value[2] 为 value 创建新数组
【发布时间】:2012-03-05 05:43:35
【问题描述】:

我有一个保存为的日志文件

{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} 的数量

提前感谢您的任何建议....已经为此尝试了所有合乎逻辑的解决方案:rant:

【问题讨论】:

    标签: php arrays multidimensional-array flat-file


    【解决方案1】:

    没有完全测试,但尝试:

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

    这确实正如我的问题所问......

    【讨论】:

    • 好的,这很好用,但我无法正确打印/回显 {name1} 和 {values} 的语法......是 $new[$line][0] 的名称和$new[$line][1] 的值?
    • 我现在认为这可能是 $new 上的另一个 foreach .... 这样我就可以列出 $name[$x] 和 $value[$x][1]..... 和$name[$y] 和 $value[$y][1] ?
    • 好吧,我到了一半,我有 foreach($new as $key => $news) { echo $key 。 "
      ";打印_r($新闻);回声“
      ”; .....这向我展示了它按预期工作.....现在我编写了新的foreach嵌套来显示每个值,谢谢
    • 很高兴它对你有用。无法回来查看,但做得很好
    【解决方案2】:

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

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

    【讨论】:

    • 缺少方括号...已修复。
    • 非常感谢,但第一个答案完全按照我的要求完成,只是等待我的代码编辑得到管理员批准:) 抱歉
    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多