2016-02-29 3 views
1

Я пытаюсь записать данные из MySQL в PHP-Array (для генерации XML-файла с PHP-библиотекой FluidXML). Когда я возвращаюсь к массиву, я получаю только первое его значение, но когда я повторяю переменную с теми же данными, что и массив, я получаю правильный вывод со всей информацией. Позвольте мне объяснить более точно:Выход массива PHP только первое значение

запрос, чтобы получить данные:

$sql = sprintf("select b.nPosID, b.nAmount, b.sName, ......."); 
$result = mysql_query($sql); 

Тогда я петля корыта результаты:

$msg = ""; 
$orderArticles = []; 
$orderSubArticles = []; 

while($data = mysql_fetch_array($result)) 
{ 
    if($data['sChange'] != null) { 
     $msg .= ' * ' . $data['sChange'] . ' ' . number_format($data['nAmount'] * $data['nPriceChange'], 2) . "\r\n"; 
     $orderSubArticles[] = ['SubArticle' => [ 
      'ArticleNo' => '0', 
      'ArticleName' => $data['sChange'], 
      'Count' => $data['nAmount'], 
      'Price' => $data['nPriceChange'] 
      ],]; 
    } 

    if ($nPosID != $data['nPosID']) { 
     $msg .= " \r\n" . $data['nAmount'] . ' x ' . $data['sName'] . ' ' . number_format($data['nAmount'] * $data['nPrice'], 2) . "\r\n"; 
     $orderArticles[] = ['Article' => [ 
      'ArticleNo' => '0', 
      'ArticleName' => $data['sName'], 
      'ArticleSize' => '0', 
      'Count' => $data['nAmount'], 
      'Price' => $data['nPrice'], 
      'Tax' => '10', 
        'SubArticleList' => [ 
          $orderSubArticles 
      ]],]; 
    } 
} 

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

Pizza 
    + extra cheese 
    + extra tonno 

Когда я возвращаю переменную $ msg, я получаю тот же правильный результат. Но когда я эхо массив, я получаю только первое значение:

Pizza 
    + extra cheese 

Чтобы быть точно, вывод, который был сгенерирован со значениями из массива:

<ArticleList> 
    <Article> 
    <ArticleName>Pizza</ArticleName> 
    <Count>1</Count> 
    <Price>12.9</Price> 
    <SubArticleList> 
     <SubArticle> 
      <ArticleName>Extra cheese</ArticleName> 
      <Count>1</Count> 
      <Price>3</Price> 
     </SubArticle> 
    </SubArticleList> 
    </Article> 
</ArticleList> 

Так второй <SubArticle> не хватает (дополнительный тонно).

+0

Можете ли вы добавить вывод 'var_dump ($ result)'? – AMartinNo1

+0

Я получаю «ресурс (19) типа (результат mysql)». –

ответ

-1

Не зная, как выглядит ваш результат, я сомневаюсь, что ваше предположение верно, что результат/строка в наборе действительно содержит обе подчастицы. Это, в конечном счете, означает, что все результаты имеют две подчастицы, и это, предположительно, не так, потому что тогда ему нужно будет вернуть что-то вроде sChange1, sChange2 ...

Даже если результаты будут выглядеть примерно так и содержат два или более суб статьи, ваш код присваивает только один из них массиву subArticles для каждого результата.

+0

Я знаю, что вы имеете в виду. Итак, как вы думаете, правильный способ решить эту проблему? –

+0

@Emre Beloz Это зависит от того, как выглядит результат. Отобразите вывод var_dump ($ results). – Awita

+0

Как я уже говорил выше, я получаю «ресурс (19) типа (результат mysql)». Когда вам нужно содержимое массива, я должен заменить $ results на $ orderArticles и $ orderSubArticles. Danke dir .. –