2013-03-04 1 views
0

У меня есть массив из базы данныхДисплей PHP массив данных в ячейку таблицы с сотовым номером

Array 
(
    [0] => stdClass Object 
     (
      [cell] => 2 
      [price] => 1543.65 
     ) 

    [1] => stdClass Object 
     (
      [cell] => 3 
      [price] => 386.22 
     ) 

) 

и Столик

<table> 
    <tr> 
    <td>1</td> 
    <td>2</td> 
    <td>3</td> 
    <td>4</td> 
    <td>5</td> 
    <td>6</td> 
    <td>7</td> 
    <td>8</td> 
    <td>9</td> 
    <td>10</td> 
    <td>12</td> 
    <td>12</td> 
    </tr> 
    <tr> 
    <?php 
    print_r($sales); 
    if(!empty($sales)) { 
     foreach($sales as $sale) { 

     if($sale->cell == 1) {echo "<td>".$sale->price."</td>";} else { echo "<td>0</td>"; } 
     if($sale->cell == 2) {echo "<td>".$sale->price."</td>";} else { echo "<td>0</td>"; } 
     ... 
     if($sale->cell == 12) {echo "<td>".$sale->price."</td>";} else { echo "<td>0</td>"; } 

     } 

    } else { 
    for($i=1; $i<=12; $i++) { 
     echo "<td>0</td>"; 
    } 
    } 
    ?> 
    </tr> 
    </table> 

Мне нужно отображать цену в том же клетке, как в массиве. Теперь моя проблема - размер массива не 12. Пожалуйста, помогите, как я могу отобразить это в той же ячейке, что и в array['cell']?

Я хочу, чтобы отобразить его как:

<tr> 
    <td>0</td> 
    <td>1543.65</td> 
    <td>386.22</td> 
    <td>0</td> 
    <td>0</td> 
    <td>0</td> 
    <td>0</td> 
    <td>0</td> 
    <td>0</td> 
    <td>0</td> 
    <td>0</td> 
    <td>0</td> 
    </tr> 

Ваша помощь и время ценится.

ответ

0

Я не уверен, я понимаю, полностью, но это должно сделать это:

echo '<tr>'; 
foreach($data as $value) { 
    $array[$value->cell] = $value->price; 
} 
for($i = 0; $i <= 12; $i++) { 
    echo '<td>'; 
    if(isset($array[$i]) 
     echo $array[$i]; 
    else echo '0'; 
    echo '</td>'; 
} 
echo '</tr>'; 

где $ данных является массивом вы получили из базы данных и $ массива одни и те же данные, но преобразуется в ассоциативный массив. Это также предполагает 12 столбцов, поэтому было бы немного сложнее, если общее количество столбцов должно быть гибким.

Редактировать: на самом деле, я просто заметил, что индекс вашего массива не соответствует значению «cell». Я исправил свой код, чтобы отразить это, но если это то, что ваши данные выглядят, вероятно, вы должны переоценить свою структуру данных.

+0

вы должны были добавлены 'еще эхо "0";' к вышеуказанному коду. –

+0

Спасибо, ChrisMoll: D Это сработало – Saleem

0

Вы можете построить свою строку, как это:

echo "<tr>"; 
for ($i = 0; $i < 12; $i++){ 
    echo "<td>"; 
    if(isset($sale[$i]) && $sale[$i]->cell == $i) echo $sale[$i]->price; 
    else echo 0; 
    echo "</td>"; 
} 
echo "</tr>"; 

Возможная проблема, хотя, это, если элементы массива не в порядке. Лучшее, что вы можете сделать, это убедиться, что они есть.

0

Это должно работать

<table> 
    <tr> 
    <td>1</td> 
    <td>2</td> 
    <td>3</td> 
    <td>4</td> 
    <td>5</td> 
    <td>6</td> 
    <td>7</td> 
    <td>8</td> 
    <td>9</td> 
    <td>10</td> 
    <td>12</td> 
    <td>12</td> 
    </tr> 
    <tr> 
    <?php 
    if(!empty($sales)) { 
     //Create an array with 12 elements and initialize each with 0 
     $salesArray = array_fill(1,12,0); 

     foreach($sales as $sale) { 
      //Override Cell Number Position in $salesArray so that if Cell number is present in $sales array, then it will have sale price, otherwise 0 
      $salesArray[$sale->cell] = $sale->price; 
     } 

     //Sort it by key. Just in case 
     ksort($salesArray); 

     foreach($salesArray as $salePrice) 
     { 
      echo "<td>".$salePrice."</td>"; 
     } 
    } else { 
    for($i=1; $i<=12; $i++) { 
     echo "<td>0</td>"; 
    } 
    } 
    ?> 
    </tr> 
    </table> 
Смежные вопросы