人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpでの多次元配列の操作に関しての質問です。

Array
(
[01] => Array
(
[-1] => 0
[0] => 田中
[1] => 北海道
)

[02] => Array
(
[-1] => 1
[0] => 鈴木
[1] => 青森
)

[03] => Array
(
[-1] => 2
[0] => 佐藤
[1] => 秋田
)

)

データベースから呼び出した情報を上記のような配列にして

最初の配列ごとに(01などのこと)表示するために

while ($row = mysqli_fetch_array($data)){

$id = $row['id'];
$item = $row['item'];
$name = $row['name'];
$kensaku[$id][$item] = $name;


foreach($kensaku as $id => $item){
foreach($item as $id2 => $val){
echo $id2.":".$val;

}
}

}
https://gist.github.com/e263e35f49058f7d8fb2

このようにやったのですが
結果は

-1の部分が羅列されるのみで思ったようにいきません

このような場合どうすればよいのでしょうか?

紹介だけなどは除外お願いします。

●質問者: robopit
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Cherenkov
●100ポイント ベストアンサー

いまいちなにをどうしたいのかわかりません。
$rowの内容はどうなっていて、どのようにしたいのでしょうか。
mysqli_fetch_arrayの第二引数にMYSQLI_ASSOCを入れて結果をみて、今一度、作りたい配列を見直してみてはどうでしょう。

<?
function pr($var) {
echo '<pre>'; print_r($var); echo '</pre>';
}

while ($row = mysqli_fetch_array($data, MYSQLI_ASSOC)){
pr($row);
}



<?
function pr($var) {
echo '<pre>'; print_r($var); echo '</pre>';
}

while ($row = mysqli_fetch_array($data)){
$id = $row['id'];
$item = $row['item'];
$name = $row['name'];
$kensaku[$id][$item] = $name;
}
pr($kensaku);

これで確認すると希望する配列にはなっていないのですか?


robopitさんのコメント
色々とためしてみた結果 GROUP BY が $itemに聞いていて -1をまとめていたみたいです。 削除したっ結果id→item の準で表示されるようになりました。 質問から少しずれるのですが たとえば検索して$nameでヒットした場合 その上のidを判定するにはどうすればよいのでしょうか?

Cherenkovさんのコメント
「ヒットした場合」はどのような配列の形をしているのでしょうか? どうやってヒットさせているのかわかるように質問してください。 [http://www.php.net/manual/ja/book.array.php:title=PHP: 配列 - Manual] から適当に、[http://www.php.net/manual/ja/function.array-key-exists.php:title=array_key_exists] [http://www.php.net/manual/ja/function.array-search.php:title=array_search] あたりを使ってできませんかね。

robopitさんのコメント
array_searchを使いヒットするとキーが返されると思うのですが 今回のような場合 $kensaku[$id][$item] = $nameでいう $name部分が検索の対象になるので キーは$itemになると思いますが、もう一つ前の$idの部分を取得したいのです。

Cherenkovさんのコメント
どうやってヒットさせているのかわかるようにコピペで再現するコードを提示してください。 >|php| $data = array( '01' => array( 'a' => 'aaa' ), '02' => array( 'b' => 'bbb' ) ); ||< のようなデータを提示してどうやって検索しているのかわからないと答えられない。 $kensaku[$id][$item]に対してヒットしたキー$itemを取得できたら、上の$kensaku[$id]に対してキーなりを検索するとか。

robopitさんのコメント
わかりずらくて申し訳ないです。 質問の経緯として 1現在のシステムを作り替えたいと思っています。 現在はSELECTで絞っています。 作りたいシステムは、とりあえずすべてのDBを回して配列に入れて 配列自体を検索して適切な情報のみを取り出すシステムを考えています。 2とりえあえず、配列がちゃんと表示されるか試してみよう あれ?できないぞなんでだ?←質問時点 3array_searchで検索しても項目が個別にヒットしてしまう ヒットした項目の親を知る方法がわかれば ヒットした項目の同じ段落の項目を表示できるのに←現在の質問 なので質問としては 多次元配列の Array ( [01] => Array ( [-1] => 0 [0] => 田中 [1] => 北海道←ヒットした場合 ) Array ( ↓ここの値 [01] => Array ( [-1] => 0 [0] => 田中 [1] => 北海道 ) を知るにはどうしたらよいか ということです。

Cherenkovさんのコメント
なんでid,nameなどキー名が数字になっているんですか?そのままでいいんですか?

Cherenkovさんのコメント
>|php| <?php $data = Array( '01' => Array( '-1' => 0, '0' => '田中', '1' => '北海道' ) ); echo key($data); //01 ||< こう?

Cherenkovさんのコメント
>|php| <?php $data = Array( '01' => Array( '-1' => 0, '0' => '田中', '1' => '北海道' ) ); foreach($data as $id => $val) { foreach($data[$id] as $i => $val2) { if ($i == '1' && $val2 == '北海道') { echo $i . $val2 . '<br>'; echo $id; //01 } } } ||<

robopitさんのコメント
無事イメージどおりにできました。 ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ