-PR-
締切済み

PHPで配列を元に新しく配列を生成するには?

  • 困ってます
  • 質問No.5068704
  • 閲覧数68
  • ありがとう数1
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 38% (26/67)

下記のような配列があります。

Array (
[0] => Array ( [no] => 13 [item] => りんご [kosuu] => 1 )
[1] => Array ( [no] => 13 [item] => みかん [kosuu] => 1 )
[2] => Array ( [no] => 13 [item] => いちご [kosuu] => 1 )
[3] => Array ( [no] => 13 [item] => ぶどう [kosuu] => 1 )
[4] => Array ( [no] => 13 [item] => 梨 [kosuu] => 1 )
[5] => Array ( [no] => 13 [item] => スイカ [kosuu] => 1 )
[6] => Array ( [no] => 13 [item] => バナナ [kosuu] => 1 )
[7] => Array ( [no] => 14 [item] => キャベツ [kosuu] => 1 )
[8] => Array ( [no] => 11 [item] => アジ [kosuu] => 1 )
[9] => Array ( [no] => 12 [item] => 豆腐 [kosuu] => 1 )
)

この配列を使用して下記のようなHTMLのタグでTABLEを生成しようと考えています。
------------------------------------------
|りんご   |みかん   |いちご   |
------------------------------------------
|ぶどう   |梨     |スイカ   |
------------------------------------------
|バナナ   |      |      |
------------------------------------------
|キャベツ  |      |      |
------------------------------------------
|アジ    |      |      |
------------------------------------------
|豆腐    |      |      |
------------------------------------------

上記の配列を元に下記のように配列データを作成するにはどうしたらいいでしょうか。
Array (
[0] => Array ( [no] => 13 [item] => りんご [kosuu] => 1 )
[1] => Array ( [no] => 13 [item] => みかん [kosuu] => 1 )
[2] => Array ( [no] => 13 [item] => いちご [kosuu] => 1 )
[3] => Array ( [no] => 13 [item] => ぶどう [kosuu] => 1 )
[4] => Array ( [no] => 13 [item] => 梨 [kosuu] => 1 )
[5] => Array ( [no] => 13 [item] => スイカ [kosuu] => 1 )
[6] => Array ( [no] => 13 [item] => バナナ [kosuu] => 1 )
[7] => Array ( [no] => 13 [item] =>   [kosuu] => 0 )
[8] => Array ( [no] => 13 [item] =>   [kosuu] => 0 )
[9] => Array ( [no] => 14 [item] => キャベツ [kosuu] => 1 )
[10] => Array ( [no] => 14 [item] =>   [kosuu] => 0 )
[11] => Array ( [no] => 14 [item] =>   [kosuu] => 0 )
[12] => Array ( [no] => 11 [item] => アジ [kosuu] => 1 )
[13] => Array ( [no] => 11 [item] =>   [kosuu] => 0 )
[14] => Array ( [no] => 11 [item] =>   [kosuu] => 0 )
[9] => Array ( [no] => 12 [item] => 豆腐 [kosuu] => 1 )
[9] => Array ( [no] => 12 [item] =>   [kosuu] => 0 )
[9] => Array ( [no] => 12 [item] =>   [kosuu] => 0 )
)

すみませんがご教授お願いします。
宜しくお願いします。
失礼します。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全3件)

  • 回答No.3
レベル13

ベストアンサー率 73% (867/1179)

そのような中間的な配列を作成する必要はあるのでしょうか?
大元の配列から、直接 table タグを生成した方が単純でしょう。

---ここから---
$columnsize = 3;
$column = 0;
print "<table>";
for ($i = 0; $i < count($array); $i++) {
$data = $array[$i];
$next = $i < count($array)-1 ? $array[$i+1] : array( no=>-1);
if ($column == 0) {
print "<tr>\n";
}
print "<td>$data[item]</td>\n";
$column++;
if ($data[no] != $next[no]) {
for (; $column < $columnsize; $column++) {
print "<td></td>\n";
}
}
if ($column >= $columnsize) {
print "</tr>\n";
$column = 0;
}
}
print "</table>\n";
---ここまで---

と、こんな感じで。
あくまで中間的な配列生成にこだわるのでしたら、
・print "<td>$data[item]</td>"の代わりに、新配列に対象要素を追加
・print "<td></td>"の代わりに、新配列に空要素を追加
するようにすれば、お求めの配列は生成できます。


  • 回答No.1
レベル14

ベストアンサー率 51% (3827/7415)

法則性がわかりません。
なにをどうすると上の配列が下の配列になると想定しているのでしょうか?
また下の配列からどうやってテーブルを起こすのでしょうか?
補足コメント
j-unico

お礼率 38% (26/67)

> なにをどうすると上の配列が下の配列になると想定しているのでしょうか?
配列のno値(11、12、13、14)を3で割り切れるように加工したいです。

> また下の配列からどうやってテーブルを起こすのでしょうか?
ソースで配列分、繰り返してTABLEタグを生成する為に配列を新しく作りたいと考えています。

わかっていただけましたでしょうか。
投稿日時 - 2009-06-24 10:06:44
  • 回答No.2
レベル11

ベストアンサー率 58% (114/196)

元の配列($arrayとします)をforeach等で回して
[no]を取り出した配列$noを作成([0]=>13 [1]=>13…という感じ)

array_count_valuesで$noの同じ値を数えた配列を作る
([13]=>7 [14]=>1 [11]=>1 [12]=>1 といった内容になります)

$noをforeachで回す(添え字は$key 要素は$valueとする)

$valueが3で割り切れるまでの条件でwhileで回す
$arrayに個数0のデータを追加していく
$array[] = array("no" => $key,"item" => "", "kosuu" => 0);
最後に$valueを1足す処理

これで末尾以降に個数0の配列が追加されます
※厳密には希望の形の配列とは若干異なります
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


抽選で合計100名様にプレゼント!

ピックアップ

ページ先頭へ