1

こんにちは、私はこのコードと配列を持っています:

<?php

$arr = array(
    0 => array('first_name' => 'Ace', 'last_name' => 'Jones'), 
    1 => array('first_name' => 'Aron', 'last_name' => 'Jones'), 
    2 => array('first_name' => 'Ben', 'last_name' => 'Jones'), 
    3 => array('first_name' => 'Billy', 'last_name' => 'Jones'), 
    4 => array('first_name' => 'Barney', 'last_name' => 'Jones'), 
    5 => array('first_name' => 'Con', 'last_name' => 'Jones'), 
    6 => array('first_name' => 'Dan', 'last_name' => 'Jones'), 
    7 => array('first_name' => 'Earl', 'last_name' => 'Jones'), 
    8 => array('first_name' => 'East', 'last_name' => 'Jones'), 
    9 => array('first_name' => 'Fez', 'last_name' => 'Jones')
);

$html = '';
foreach($arr as $k => $v) {
    echo $v['first_name'] . '<br />';
}
?>

<table rules="all" style="border:1px solid blue;" cellspacing="2" cellpadding="2">
    <tr>
        <td>Label</td>
        <td>First Name</td>
        <td>Last Name</td>
    </tr>
    <?php echo $html; ?>
</table>

名の文字ごとにラベルを一度だけ表示するにはどうすればよいですか? 以下は、私が達成したい結果です。

ここに画像の説明を入力

ありがとう。

4

4 に答える 4

2

あなたがしたいことは、別の変数でそのエントリを処理した後にエントリの値を保存して、次の反復で使用できるようにすることです。

例えば:

$previous = '';
foreach($array as $key => $value) {
  if($previous != $value) {
    /* insert code that only runs if previous is not equal here. */
  }

  /* insert code that is ran every time here. */

  $previous = $value; //stores the value so it can be used on the next iteration.
}

これをあなたの状況に適用する方法は、読者の演習として残されています。

于 2013-08-19T03:32:16.813 に答える
2
<?php
$arr = array(
    0 => array('first_name' => 'Ace', 'last_name' => 'Jones'), 
    1 => array('first_name' => 'Aron', 'last_name' => 'Jones'), 
    2 => array('first_name' => 'Ben', 'last_name' => 'Jones'), 
    3 => array('first_name' => 'Billy', 'last_name' => 'Jones'), 
    4 => array('first_name' => 'Barney', 'last_name' => 'Jones'), 
    5 => array('first_name' => 'Con', 'last_name' => 'Jones'), 
    6 => array('first_name' => 'Dan', 'last_name' => 'Jones'), 
    7 => array('first_name' => 'Earl', 'last_name' => 'Jones'), 
    8 => array('first_name' => 'East', 'last_name' => 'Jones'), 
    9 => array('first_name' => 'Fez', 'last_name' => 'Jones')
);
sort($arr); // ensure correct order
$html = '';
foreach($arr as $k => $v) {
    if(substr($v['first_name'], 0, 1) != $previous) {
        $html .= '<tr><td>' . substr($v['first_name'], 0, 1) . '</td>';
    } else {
        $html .= '<tr><td>&nbsp;</td>';
    }
    $html .= '<td>' . $v['first_name'] . '</td>';
    $html .= '<td>' . $v['last_name'] . '</td></tr>';
    $previous = substr($v['first_name'], 0, 1);
}
?>

<table rules="all" style="border: 1px solid blue;" cellspacing="2" cellpadding="2">
    <tr>
        <td>Label</td>
        <td>First Name</td>
        <td>Last Name</td>
    </tr>
    <?php echo $html; ?>
</table>

一般的な考え方は、現在の項目と前の項目を比較する前に、前の結果を変数に格納することです。変数は、更新される$previousに現在のアイテムに対してチェックされる前のアイテムを格納します。PHP は 1 行ずつ実行されることに注意してください。前の結果の最初の文字が前のアイテムの最初の文字と等しくない場合は、それを追加しましょう。それ以外の場合は、改行しない空白文字を追加して、テーブル セルの可視性を維持します。 $previous

これはまさにあなたがやりたいことのようです。これをクリーンアップする方法はありますが、それはまさにあなたが望むとおりです。コードを見る

于 2013-08-19T03:34:13.087 に答える
0
$html = "";
foreach($arr as $a) 
{
    $html .= "<tr>";
    $temp = 1;
    foreach($a as $k => $v)
    {
         if($temp == 1)
         {
             $html .= "<td>" . ucfirst($v['first_name'][0]) . "</td>";
         } 

         $html .= "<td>" . $v['first_name'] . "</td><td>" . $v['last_name'] . "</td>";
         $temp++; 
    }
    $html .= "</tr>";
}
于 2013-08-19T03:21:05.563 に答える
0
$arr = array(
    0 => array('first_name' => 'Ace', 'last_name' => 'Jones'), 
    1 => array('first_name' => 'Aron', 'last_name' => 'Jones'), 
    2 => array('first_name' => 'Ben', 'last_name' => 'Jones'), 
    3 => array('first_name' => 'Billy', 'last_name' => 'Jones'), 
    4 => array('first_name' => 'Barney', 'last_name' => 'Jones'), 
    5 => array('first_name' => 'Con', 'last_name' => 'Jones'), 
    6 => array('first_name' => 'Dan', 'last_name' => 'Jones'), 
    7 => array('first_name' => 'Earl', 'last_name' => 'Jones'), 
    8 => array('first_name' => 'East', 'last_name' => 'Jones'), 
    9 => array('first_name' => 'Fez', 'last_name' => 'Jones')
);

$html = '';
foreach($arr as $k => $v) {
    $lable = substr($v['first_name'], 0, 1);
    $html[$lable][] = array($v['first_name'],$v['last_name']);
}
?>
<table rules="all" style="border:1px solid blue;" cellspacing="2" cellpadding="2">
    <tr>
        <td>Label</td>
        <td>First Name</td>
        <td>Last Name</td>
    </tr>
    <?php 
    ksort($html);
    foreach ($html as $k => $v) {
        foreach ($v as $ke => $va) {
            echo "<tr>";
            echo "<td>".($ke==0?$k:null)."</td>";
            echo "<td>".$va[0]."</td>";
            echo "<td>".$va[1]."</td>";
            echo "</tr>";
        }
    }
     ?>
</table>
于 2013-08-19T03:37:12.567 に答える