0

CURRENT以下のと結果を比較して、DESIRED私がやろうとしていることを確認してください。

$arr=array(
array('list_name'=>'Food', 'list_item'=>'bread'),
array('list_name'=>'Food', 'list_item'=>'meat'),
array('list_name'=>'Drinks', 'list_item'=>'water'),
array('list_name'=>'Drinks', 'list_item'=>'milk')
);

foreach($arr as $row){   
  echo $row['list_name'].'<br>'; 
  echo $row['list_item'].'<br>';
  echo '<br>___<br>';
}

現在の結果

Food
bread

___
Food
meat

___
Drinks
water

___
Drinks
milk

___

望ましい結果

Food
1.bread
2.meat
___

Drinks
1.water
2.milk
___

アップデート

より複雑で、さらに一般化可能な例:

$arr=array(
array('list_name'=>'Food', 'list_item1'=>'bread', 'list_item2' => 2001),
array('list_name'=>'Food', 'list_item1'=>'meat', 'list_item2' => 2002),
array('list_name'=>'Drinks', 'list_item1'=>'water', 'list_item2' => 2003),
array('list_name'=>'Drinks', 'list_item1'=>'milk', 'list_item2' => 2004)
);

望ましい結果

Food
1.bread, 2001
2.meat, 2002
___

Drinks
1.water, 2003
2.milk, 2004
___
4

4 に答える 4

4

配列を反復処理して、項目データを新しい配列に追加できます (それぞれに 1 つlist_name)。

例えば:

$new_array = array();

foreach ($arr as $row)
{
  $new_array[$row['list_name']][] = $row['list_item'];
}

foreach ($new_array as $name => $items)
{

  echo $name . '<br>'; 

  foreach ($items as $index => $item)
  {
    echo ($index + 1) . '. ' . $item . '<br>';
  }

  echo '___<br>';

}

あなたのアップデートで:

$new_array = array();

foreach ($arr as $row)
{

  $name = $row['list_name'];

  unset($row['list_name']);

  $new_array[$name][] = $row;

}

foreach ($new_array as $name => $items)
{

  echo $name . '<br>'; 

  foreach ($items as $index => $item)
  {
    echo ($index + 1) . '. ' . implode(', ', $item) . '<br>';
  }

  echo '___<br>';

}
于 2013-03-02T20:08:19.137 に答える
1

このための一般的なレシピの1つは、リストをループするときに現在の見出し/セクションを変数に格納することです。次に、新しい見出しに遭遇するたびに、その見出しをエコーし​​、番号付けを再開します(またはHTML<ol>タグを閉じるなど)。

$current_section = NULL;
foreach ( $arr as $row )
{
    if ( $current_section != $row['list_name'] )
    {
        // Begin new section
        echo $row['list_name'];
        // Remember current section
        $current_section != $row['list_name'];
    }

    // Output current item
    echo $row['list_item'];
}

このアプローチは、すべての「食べ物」アイテムが一緒になり、次にすべての「飲み物」などになるようにリストが並べ替えられている場合にのみ機能することに注意してください。

それ以外の場合は、各セクションにサブ配列が存在するように配列を再構築し、ネストされたループのペアを使用するという代替アプローチを使用できます。

$new_array = array();
foreach ($arr as $row)
{
    $new_array[$row['list_name']][] = $row['list_item'];
}

foreach ( $new_array as $section_name => $items )
{
    echo $section_name;
    foreach ( $items as $row )
    {
        echo $row;
    }
}
于 2013-03-02T20:17:18.407 に答える
1
$arr=array(
array('list_name'=>'Food', 'list_item'=>'bread'),
array('list_name'=>'Food', 'list_item'=>'meat'),
array('list_name'=>'Drinks', 'list_item'=>'water'),
array('list_name'=>'Drinks', 'list_item'=>'milk')
);

$names = array();

foreach ( $arr as $item){
    $name = $item['list_name'];
    if(!in_array($name, $names)){
        $names[] = $name;
        echo $name ."<BR>";
    }
    echo $item['list_item']."<BR>";
}
于 2013-03-02T20:39:25.600 に答える
-1

さて、私は以前に間違いを犯しましたが、これをテストしました、そしてそれはうまくいきます。

<?php
$food = array('bread', 'meat');
$drink = array('water', 'milk');

$object = array('food' => $food, 'drink' => $drink);

foreach($object as $row){   
  echo $row[0].'<br>'; 
  echo $row[1].'<br>';
  echo '<br>___<br>';
}
?>
于 2013-03-02T20:22:25.567 に答える