Преобразовать массив с помощью Php - PullRequest
0 голосов
/ 20 сентября 2011

Как мне изменить этот php:

<?php 
        $result = $sth->fetchAll();
        print_r($result); //or var_dump($result); for more info
        foreach($result as $row){
            print_r($row);
        }   
        ?>      

Это выводит, например, мне:

Joseph Dickinson wants an Xbox 360 for 150
   I need a one quick!

  John Doe offered it for 149.99 
  Jane Doe offered it for 154.99 

Как мне сделать это выше, используя выводимый массив print_r results?

Array
    (
        [0] => Array
            (
                [uFName] => Joseph
                [0] => Joseph
                [uLName] => Dickinson
                [1] => Dickinson
                [listTitle] => Need Xbox 360
                [2] => Need Xbox 360
                [listPropPrice] => 150
                [3] => 150
                [listCmt] => I need one quick!
                [4] => I need one quick!
                [listDt] => 2011-09-15
                [5] => 2011-09-15
                [mFName] => John
                [6] => John
                [mLName] => Doe
                [7] => Doe
                [moAmt] => 149.99
                [8] => 149.99
                [moDtOff] => 2011-09-15
                [9] => 2011-09-15
            )

        [1] => Array
            (
                [uFName] => Joseph
                [0] => Joseph
                [uLName] => Dickinson
                [1] => Dickinson
                [listTitle] => Need Xbox 360
                [2] => Need Xbox 360
                [listPropPrice] => 150
                [3] => 150
                [listCmt] => I need one quick!
                [4] => I need one quick!
                [listDt] => 2011-09-15
                [5] => 2011-09-15
                [mFName] => Jane
                [6] => Jane
                [mLName] => Doe
                [7] => Doe
                [moAmt] => 154.99
                [8] => 154.99
                [moDtOff] => 2011-09-15
                [9] => 2011-09-15
            )

        [2] => Array
            (
                [uFName] => Joseph
                [0] => Joseph
                [uLName] => Dickinson
                [1] => Dickinson
                [listTitle] => Need Xbox 360
                [2] => Need Xbox 360
                [listPropPrice] => 150
                [3] => 150
                [listCmt] => I need one quick!
                [4] => I need one quick!
                [listDt] => 2011-09-15
                [5] => 2011-09-15
                [mFName] => Diana
                [6] => Diana
                [mLName] => Matthews
                [7] => Matthews
                [moAmt] => 160.00
                [8] => 160.00
                [moDtOff] => 2011-09-15
                [9] => 2011-09-15
            )

        [3] => Array
            (
                [uFName] => Joseph
                [0] => Joseph
                [uLName] => Dickinson
                [1] => Dickinson
                [listTitle] => Need Xbox 360
                [2] => Need Xbox 360
                [listPropPrice] => 150
                [3] => 150
                [listCmt] => I need one quick!
                [4] => I need one quick!
                [listDt] => 2011-09-15
                [5] => 2011-09-15
                [mFName] => Amanda
                [6] => Amanda
                [mLName] => Koste
                [7] => Koste
                [moAmt] => 174.99
                [8] => 174.99
                [moDtOff] => 2011-09-15
                [9] => 2011-09-15
            )

        [4] => Array
            (
                [uFName] => Warren
                [0] => Warren
                [uLName] => Kennan
                [1] => Kennan
                [listTitle] => Need New Sofa
                [2] => Need New Sofa
                [listPropPrice] => 1000
                [3] => 1000
                [listCmt] => Need one quick
                [4] => Need one quick
                [listDt] => 2011-09-15
                [5] => 2011-09-15
                [mFName] => Diana
                [6] => Diana
                [mLName] => Matthews
                [7] => Matthews
                [moAmt] => 495.99
                [8] => 495.99
                [moDtOff] => 2011-09-15
                [9] => 2011-09-15
            )

        [5] => Array
            (
                [uFName] => Warren
                [0] => Warren
                [uLName] => Kennan
                [1] => Kennan
                [listTitle] => Need New Sofa
                [2] => Need New Sofa
                [listPropPrice] => 1000
                [3] => 1000
                [listCmt] => Need one quick
                [4] => Need one quick
                [listDt] => 2011-09-15
                [5] => 2011-09-15
                [mFName] => Amanda
                [6] => Amanda
                [mLName] => Koste
                [7] => Koste
                [moAmt] => 489.99
                [8] => 489.99
                [moDtOff] => 2011-09-15
                [9] => 2011-09-15
            )

    )
    Array
    (
        [uFName] => Joseph
        [0] => Joseph
        [uLName] => Dickinson
        [1] => Dickinson
        [listTitle] => Need Xbox 360
        [2] => Need Xbox 360
        [listPropPrice] => 150
        [3] => 150
        [listCmt] => I need one quick!
        [4] => I need one quick!
        [listDt] => 2011-09-15
        [5] => 2011-09-15
        [mFName] => John
        [6] => John
        [mLName] => Doe
        [7] => Doe
        [moAmt] => 149.99
        [8] => 149.99
        [moDtOff] => 2011-09-15
        [9] => 2011-09-15
    )
    Array
    (
        [uFName] => Joseph
        [0] => Joseph
        [uLName] => Dickinson
        [1] => Dickinson
        [listTitle] => Need Xbox 360
        [2] => Need Xbox 360
        [listPropPrice] => 150
        [3] => 150
        [listCmt] => I need one quick!
        [4] => I need one quick!
        [listDt] => 2011-09-15
        [5] => 2011-09-15
        [mFName] => Jane
        [6] => Jane
        [mLName] => Doe
        [7] => Doe
        [moAmt] => 154.99
        [8] => 154.99
        [moDtOff] => 2011-09-15
        [9] => 2011-09-15
    )
    Array
    (
        [uFName] => Joseph
        [0] => Joseph
        [uLName] => Dickinson
        [1] => Dickinson
        [listTitle] => Need Xbox 360
        [2] => Need Xbox 360
        [listPropPrice] => 150
        [3] => 150
        [listCmt] => I need one quick!
        [4] => I need one quick!
        [listDt] => 2011-09-15
        [5] => 2011-09-15
        [mFName] => Diana
        [6] => Diana
        [mLName] => Matthews
        [7] => Matthews
        [moAmt] => 160.00
        [8] => 160.00
        [moDtOff] => 2011-09-15
        [9] => 2011-09-15
    )
    Array
    (
        [uFName] => Joseph
        [0] => Joseph
        [uLName] => Dickinson
        [1] => Dickinson
        [listTitle] => Need Xbox 360
        [2] => Need Xbox 360
        [listPropPrice] => 150
        [3] => 150
        [listCmt] => I need one quick!
        [4] => I need one quick!
        [listDt] => 2011-09-15
        [5] => 2011-09-15
        [mFName] => Amanda
        [6] => Amanda
        [mLName] => Koste
        [7] => Koste
        [moAmt] => 174.99
        [8] => 174.99
        [moDtOff] => 2011-09-15
        [9] => 2011-09-15
    )
    Array
    (
        [uFName] => Warren
        [0] => Warren
        [uLName] => Kennan
        [1] => Kennan
        [listTitle] => Need New Sofa
        [2] => Need New Sofa
        [listPropPrice] => 1000
        [3] => 1000
        [listCmt] => Need one quick
        [4] => Need one quick
        [listDt] => 2011-09-15
        [5] => 2011-09-15
        [mFName] => Diana
        [6] => Diana
        [mLName] => Matthews
        [7] => Matthews
        [moAmt] => 495.99
        [8] => 495.99
        [moDtOff] => 2011-09-15
        [9] => 2011-09-15
    )
    Array
    (
        [uFName] => Warren
        [0] => Warren
        [uLName] => Kennan
        [1] => Kennan
        [listTitle] => Need New Sofa
        [2] => Need New Sofa
        [listPropPrice] => 1000
        [3] => 1000
        [listCmt] => Need one quick
        [4] => Need one quick
        [listDt] => 2011-09-15
        [5] => 2011-09-15
        [mFName] => Amanda
        [6] => Amanda
        [mLName] => Koste
        [7] => Koste
        [moAmt] => 489.99
        [8] => 489.99
        [moDtOff] => 2011-09-15
        [9] => 2011-09-15
    )

1 Ответ

1 голос
/ 20 сентября 2011

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

$array = array('noun'=>'spot', 'verb'=>'run');

Вы можете просто построить предложение из частей:

$sentence = "See ".$array['noun'].".\n".
            "See ".$array['noun']." ".$array['verb'].".\n". 
            $array['verb']." ".$array['noun'].", ".$array['verb']."!";

Это самый простой и эффективный метод. Однако у него есть некоторые недостатки:

  • Может быть трудно читать, особенно если есть большое количество текста или значений для замены.
  • Это не может быть очень легко обновлено - вам нужно изменить программу, чтобы изменить структуру предложения.

Другой подход - использовать заполнители в строке и подставлять в значения:

$sentence_template = "See {noun}.\nSee {noun} {verb}. {verb} {noun}, {verb}!";
$from = array();
foreach(array_keys($array) as $label)
    $from[] = '{'.$label.'}';
$to = array_values($array);

$sentence = str_replace($from, $to, $sentence_template);

Этот подход позволяет определять строку шаблона отдельно от программы, например, в базе данных или в файле конфигурации, ее также легче читать и поддерживать. С другой стороны;

  • Это менее гибко. Например, в первом подходе заглавный глагол в третьей строке будет простым, но таким образом сложнее.

Звучит так, будто на твой вопрос все в порядке.

( Если вы используете второй подход, обязательно сконфигурируйте объект базы данных так, чтобы он возвращал ассоциативные (строковые) элементы, а не числовые элементы, иначе он будет без необходимости искать {0}, {1} и т. Д. )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...