0

私は5つの配列を持っています

    $array1 = array('ar1_1','ar1_2','ar1_3','ar1_4');
    $array2 = array('ar2_1','ar2_2','ar2_3','ar2_4','ar2_5');
    $array3 = array('ar3_1','ar3_2','ar3_3','ar3_4','ar3_5','ar3_6');
    $array4 = array('ar4_1','ar4_2','ar4_3','ar4_4');
    $array5 = array('ar5_1','ar5_2','ar5_3');
    $loc = array('AM','IN','US');

ある方法で表示したい。

<table>
<tr class="d1 vevent">
<td>
<b><abbr class="dtstart" title="' . $array1 . '">' . $array2 . '</abbr></b> <br>' . $array3 . '</td>
<td>
<span class="summary">' . $array4 . ' - ' . $array5 . '</span>
<span class="location">' . $loc . '</span>
</td>
</tr>
</table>

解決策はありますか?

for ループ、foreach ループ、zip、array_merge、array_combine を試しましたが、目的の結果を得ることができませんでした。

私が試したコード:

echo '<table width="100%" border="1" cellspacing="0" cellpadding="5">
<tbody>
<tr class="toprow">
<td><strong>Date </strong></td>
<td><strong> Details</strong></td>
</tr>';


/*
foreach(array_combine($date, $time) as $time1 => $date1)
{
 @$date1 = split('[()]', $date1);
  echo $time1. $date1[1]. "<br />";
} */




$result = count($match_no);
for($i=0; $i<$result; $i++) {
echo '
<tr class="d1 vevent">
<td>
<b><abbr class="dtstart" title="';
echo trim($date[0]);
echo '">';
echo $date[0]; 
echo '</abbr></b> <br>';

foreach($time as $time1)
{
 @$time1 = split('[()]', $time1);
  echo $time1[1];
}
echo '</td>
<td>
<span class="summary">';
echo $match_no[0];
echo ' - <a href="';
echo '#" class="url">';
echo $team[0];
echo ' vs ';
echo $team[1];
echo '</a></span>';
echo '<span class="location">';
echo $location;
echo '</span>';
echo '</td>
</tr>';

}

echo '</table>';

これは私が試したコードですが、 foreach ループは for ループが繰り返されるたびに複数回繰り返されます。

4

1 に答える 1

0

これにはクラスを使用することをお勧めしますか?次のようなもの:

class myClass(){
    public $title;
    public $var1;
    public $var2;
    public $var3;
    public $var4;
    public $var5;
    public $loc;

    public function __construct($title, $var1, $var2, $var3, $var4, $var5){
         $this->title = $title;
         $this->var1 = $var1;
         $this->var2 = $var2;
         $this->var3 = $var3;
         $this->var4 = $var4;
         $this->var5 = $var5;
    }

    public function printTable(){
    echo '
        <tr class="d1 vevent">
          <td>
             <b><abbr class="dtstart" title="' . $this->var1 . '">' . $this->var2 . '</abbr></b> <br>' . $this->var3 . '</td>
          <td>
              <span class="summary">' . $this->var4 . ' - ' . $this->var5 . '</span>
              <span class="location">' . $this->loc . '</span>
          </td>
        </tr>';
    }
}

次に、配列内のデータを使用して、次のようなオブジェクトを作成できます。

$obj = myClass($ar1_1,$ar1_2,$ar1_3, $ar1_5,$loc);
//Then print the table:
$obj->printTable();

または、オブジェクトの配列がある場合:

echo "<table>";
for($objArray as $obj){
    $obj->printTable();
}
echo "</table>";

最後に、このクラスを使用して現在の配列システムを使用する場合は、次のようにします。

$longestArray = $array1;
if(count($array2)>count($longestArray)) $longestArray = $array2;
if(count($array3)>count($longestArray)) $longestArray = $array3;
if(count($array4)>count($longestArray)) $longestArray = $array4;
if(count($array5)>count($longestArray)) $longestArray = $array5;
if(count($loc)>count($longestArray)) $longestArray = $loc;

$objArray = Array();
for($i=0;$i<count($longestArray);$i++){
    $objArray[] = myClass($array1[$i],$array2[$i],$array3[$i], $array4[$i], $array5[$i], $loc[$i]);
}

echo "<table>";
for($objArray as $obj){
    $obj->printTable();
}
echo "</table>";

注: 配列の長さがインデックスよりも短い場合は常に、配列のインデックスが存在しないという多くの警告が表示されますが、これは有効であり、正常に実行されるはずです。また、私はそれをテストしなかったので、タイプミスが起こりやすい.

于 2013-02-25T20:25:13.993 に答える