2014-06-16 47 views
1

這裏我有一個循環,其中包含行號爲<table>的5個名稱。這table應該是一個排名,其中第一列將顯示一行參與者名稱,其他10列應顯示分數。獲取PHP數組值並將其打印在不同的列上

對於我想添加分數的空列,我想爲每個參與者創建一個array,並使其通過<td>循環。進入array有10個數字,每個數字應顯示在每個空的<td>左側。

//Names 
$names = array("Mike", "Kyle", "Johnny", "Will", "Vasques"); 

//scores values for each name 
$scores = array(
    "Mike" => array(04, 03, 00, 07, 04, 07, 00, 01, 00, 07, 04), 
    "Kyle" => array(07, 01, 00, 03, 04, 01, 00, 07, 03, 04, 04), 
    "Johnny" => array(07, 07, 00, 03, 00, 04, 00, 01, 01, 04, 03), 
    "Will" => array(03, 04, 00, 03, 04, 07, 00, 01, 00, 07, 04), 
    "Vasques" => array(03, 01, 00, 03, 04, 07, 00, 01, 00, 07, 07) 
); 

//start loop for rows 
for($x=0; $x<count($names); $x++) { 
    echo "<tr>"; 
    //column for the names 
    echo "<td>$names[$x]</td>"; 
    //loop for columns where the score should be displayed 
    for($td=2; $td<=10; $td++) { 
    echo "<td></td>"; 
    } 
    echo "</tr>"; 
} 

它應該顯示是這樣的:

Mike 04 03 00 07 04 07 00 01 00 07 04 
Kyle 07 01 00 03 04 01 00 07 03 04 04 
Johnny 03 01 00 03 04 07 00 01 00 07 07 

等等...

+0

你會不會只是更換回聲 「​​?」;與回聲「​​{$ scores [$ names [$ x]] [$ td - 2]}」 –

+0

您需要交叉驗證'$ names'與'$ scores' ?,或者只是簡單地打印出$在桌上的分數?一個簡單的foreach應該足夠了 – user1978142

+1

請問你爲什麼要發佈這個你以前發佈的這個奇怪的切線版本的問題? http://stackoverflow.com/questions/24236002/get-php-array-values-and-print-in-a-loop – JakeGould

回答

0

嘗試此

echo "<table>"; 
foreach($scores as $key=>$value) 
{ 
    echo "<tr>"; 
    echo "<td>$key</td>"; 
    for($x=0; $x<count($value); $x++) 
    { 
     echo "<td>".sprintf('%02d', $value[$x])."</td>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 

實施例全碼視圖

<?php 
//Names 
$names = array("Mike", "Kyle", "Johnny", "Will", "Vasques"); 

//scores values for each name 
$scores = array(
    "Mike" => array(04, 03, 00, '-', '-', '-', '-', '-', '-', 07, 04), 
    "Kyle" => array(07, 01, 00, 03, 04, 01, 00, 07, 03, 04, 04), 
    "Johnny" => array(07, 07, 00, 03, 00, 04, 00, 01, 01, 04, 03), 
    "Will" => array(03, 04, 00, 03, 04, 07, 00, 01, 00, 07, 04), 
    "Vasques" => array(03, 01, 00, 03, 04, 07, 00, 01, 00, 07, 07) 
); 
echo "<table>"; 
foreach($scores as $key=>$value) 
{ 
    echo "<tr>"; 
    echo "<td>$key</td>"; 
    for($x=0; $x<count($value); $x++) 
    { 
      if (is_numeric($value[$x])) 
    { 
     echo "<td>".sprintf('%02d', $value[$x])."</td>"; 
    } 
    else 
    { 
     echo "<td>". $value[$x]."</td>"; 
    } 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 

輸出

Mike 04 03 00 - - - - - - 07 04 
Kyle 07 01 00 03 04 01 00 07 03 04 04 
Johnny 07 07 00 03 00 04 00 01 01 04 03 
Will 03 04 00 03 04 07 00 01 00 07 04 
Vasques 03 01 00 03 04 07 00 01 00 07 07 
+0

這工作正常,你甚至記得在數字之前輸出額外的0!這太棒了! –

+0

還有一個問題。我從來不知道'sprintf'屬性。我注意到它爲數字輸出了一個額外的0。但我注意到它將單個值轉換爲零。這可能會保持有一個單一的破折號「 - 」,而不是將其轉換爲零的字段? –

+0

@Caio Ferrari對不起,我不明白你的要求。解釋清楚 –

0

你不需要$names陣列,你可以輸出其作爲第一級陣列鍵。這裏的數字for()循環使用foreach()一個例子,而不是對更清潔的代碼:

foreach($scores as $name => $values) { 
    echo '<tr><td>' . $name . '</td>' . PHP_EOL; 
    foreach($values as $val) { 
     echo '<td>' . $val . '</td>' . PHP_EOL; 
    } 
    echo '</tr>' . PHP_EOL; 
} 
0
<?php 
foreach($names as $names) 
{ 
    echo "<tr>"; 
    echo "<td>$names</td>"; 
    foreach($scores[$names] as $nmscore) 
    { 
     echo "<td>$nmscore</td>"; 

    } 
echo "</tr>"; 
} 

>

0
<?php 
foreach($names as $name) 
{ 
    echo "<tr>"; 
    echo "<td>$name</td>"; 
    foreach($scores[$name] as $nmscore) 
    { 
     echo "<td>$nmscore</td>"; 

    } 
echo "</tr>"; 
} 

?> 
+2

歡迎來到StackOverflow。您可能希望包含該代碼爲OP所做的解釋。 – JamesENL

相關問題