создать новый массив со значением [1] для ключа и значением [2] для значения - PullRequest
1 голос
/ 13 февраля 2012

У меня есть файл журнала, который сохраняется как

{time} | {name} | {value1}
{time} | {name} | {value2}
{time} | {name2} | {value3}
{time} | {name3} | {value4}

{время} - это отметка времени в секундах с начала эпохи 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:

Ответы [ 2 ]

2 голосов
/ 13 февраля 2012

Тестирование выполнено не полностью, но попробуйте:

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

РЕДАКТИРОВАТЬ ПО DJ-PIMP ..

$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, для первоначальной идеи @ Аарон:)

0 голосов
/ 13 февраля 2012

Различные варианты для добавления значений, использующих один и тот же ключ в подмассивах:

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