
idとnameとcountとその他のいろいろな要素を持つ連想配列entryがあります。
entry
id name count …
-------------
1 satou 35
2 satou 49
3 sio 18
4 sio 29
5 sio 39
6 sio 40
7 miso 28
:
--------------
データベースの操作で同じidのcountのみを更新したいため、このentryから、「nameが同じで、countが最大のものを抽出した3次元の連想配列entry2」を作成したいです。
entry2
id name count
-------------
2 satou 49
6 sio 40
7 miso 28
:
--------------
このような働きをするphpのコードを教えてください。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
またもやご回答、本当にありがとうございます。
うーん…どう考えても私の環境が壊れていますよね……
もう一度、環境そのものを再構築してみます。
何度もご解答していただき、本当に助かりました。
心より感謝の言葉を申し上げます。ありがとうございました。
No.3
- 回答日時:
> array_push($r.array_combine
ドットでなくカンマですね。
詳しくは、array_pushのリファレンスをご覧ください。
ドットではなくカンマでしたか。大変申し訳ありません。
その部分を訂正しましたが、やはり
Parse error: syntax error, unexpected $end in C:\xampplite\htdocs\test.php on line 19
と出てきました。
知らない関数を調べつつ、,と.、:と;などの打ち間違いが原因かと思いフォントを大きくしてコードを調べてみましたが、構文エラーの原因はやはりわかりませんでした。
実行環境は
###### Apache Friends XAMPP Lite (Basis Package) version 1.7.3 ######
+ Apache 2.2.14 (IPV6 enabled)
+ MySQL 5.1.41 (Community Server) with PBXT engine 1.0.09-rc
+ PHP 5.3.1 (PEAR)
+ Miniperl 5.10.1
+ XAMPP Control Version 2.5.8 (ApacheFriends Edition)
+ XAMPP CLI Bundle 1.6
+ XAMPP Port Check 1.5
+ XAMPP Security 1.1
+ SQLite 2.8.17
+ SQLite 3.6.20
+ OpenSSL 0.9.8l
+ phpMyAdmin 3.2.4
+ msmtp 1.4.19 (a sendmail compatible SMTP client)
+ Webalizer 2.21-02 (with GeoIP lite)
+ Ming 0.4.3 for PHP
+ PDF with pdflib lite v7.0.4p4 for PHP
で、訂正したPHPは
----
<?php
$id=array(1,2,3,4,5,6,7);
$name=array('satou','satou','sio','sio','sio','sio','miso');
$count=array(35,49,18,29,39,40,28);
$entry=array('id' =>$id,'name' =>$name,'count' =>$count);
$result=array(); foreach(array2recordset( $entry ) as $value){
$vname = $value[ 'name' ];
if ( isset ($result[$vname]))
if($result[$vname]['count'] >=$value['count']) continue;
$result [$vname] =$value;
}
foreach ($result as $e ){ ?><?= implode(' ',$e) ?>
<? } function array2recordset( $param_array ){
$karr = array_keys($param_array);
$varr = array_values($param_array);
$r=array(); while( count( $varr[0] ) > 0 )
array_push($r,array_combine($karr, array_map('array_shift',&$varr ) ) );
return $r; } ?>
になります。
他に原因があれば、どのようなものでしょうか。
どうかよろしくお願いします。
No.2
- 回答日時:
こんなんとか。
『「nameが同じで、countが最大のものを抽出した3次元の連想配列entry2」を作成したいです』については、未対応。適宜、変形すればよいかなということで。

再度のご回答、本当にありがとうございます。
まずは教えていただいたコードを使用してみようと忠実に打って実行したところ、
Parse error: syntax error, unexpected $end in C:\xampplite\htdocs\test.php on line 19
と19行目でエラーが出ます。
コードの打ち間違いかと思い、何度も見直したのですが結局わかりませんでした。
原因が知りたいです。どうかよろしくお願いします。
---
<?php
$id=array(1,2,3,4,5,6,7);
$name=array('satou','satou','sio','sio','sio','sio','miso');
$count=array(35,49,18,29,39,40,28);
$entry=array('id' =>$id,'name' =>$name,'count' =>$count);
$result=array(); foreach(array2recordset( $entry ) as $value){
$vname = $value[ 'name' ];
if ( isset ($result[$vname]))
if($result[$vname]['count'] >=$value['count']) continue;
$result [$vname] =$value;
}
foreach ($result as $e ){ ?><?= implode(' ',$e) ?>
<? } function array2recordset( $param_array ){
$karr = array_keys($param_array);
$varr = array_values($param_array);
$r=array(); while( count( $varr[0] ) > 0 )
array_push($r.array_combine($karr, array_map('array_shift',&$varr ) ) );
return $r; } ?>
No.1
- 回答日時:
こんなのとか。
なんのひねりもないですが。
ご回答ありがとうございます。大変参考になりました。
しかし、自分でも作ってみたのですが、シンタックスエラーになってしまいます。
真ん中のforeach文が原因かな、などと自分でも原因を考えて見たのですが、結局どういう風にいじってみても原因がわかりません。
どのようにしたら修正できるのか、よろしければご教示ください。
どうかよろしくお願いします。
<?php
$id=array(1,2,3,4,5,6,7);
$name=array("satou","satou","sio","sio","sio","sio","miso");
$count=array(35,49,18,29,39,40,28);
$entry=array("id" =>$id,"name" =>$name,"count" =>$count);
$result=array();//entry2…わかりにくいので結果の格納はresultにします。
foreach($entry as $value){
if ( isset ( $result[$value["name"]] ) ){
if( $result[ $value["name"] ]["count"] >=$value["count"] ){
$result[ $value["name"] ] =$value ;
}
}
foreach($result as $entry){
echo implode(" ",$entry)."\n";
}
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのエラーについて
-
functionとclassの使い分け
-
POSTの項目に追加
-
php+mysqlでの重複チェックにつ...
-
PHPのエラーの解消法について教...
-
入力した部分を表示させたまま...
-
ボタンをクリックでPHP文を実行
-
HTMLで前の画面に戻る時、入力...
-
テキストボックスとsubmitボタ...
-
検索時の選択内容を保持する方法
-
選択したタグ、入力した検索文...
-
phpで、フォームのラジオボタン...
-
smartyでチェックボックスをチ...
-
複数チェックボックスの入力制...
-
送信ボタンでカウントアップ
-
PHPでCookieを使った訪問回数に...
-
$_POST['hoge']のデータをフラ...
-
郵便番号検索
-
formの外にあるチェックボック...
-
HTML_QuickForm_Renderer_Array...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
$_SESSIONに渡した後はそのまま...
-
Flaskでサーバー立ち上げに関して
-
テキストボックスの値を取得したい
-
php+mysqlでの重複チェックにつ...
-
POSTの項目に追加
-
ファイル名を変更してアップロ...
-
VBA で、スペースを含むファイ...
-
name属性が全角の場合・・・
-
php、sqlite3にデーター追加で...
-
PHP5でsimple_xml_load_fileす...
-
PHP等を用いて在庫数を表示・管...
-
Smartyのforeachのnameに変数を...
-
sqlite文字列を格納、出力
-
scanfでの読み込み文字数制限
-
CakePHP テーブル名カラム名の...
-
あるカラム内の最初の一文字と...
-
DB接続やInsertでのエラーを画...
-
Fortranでのファイル名操作につ...
-
トレイトの変数の扱い方
-
if文のもっとスマートな書き方
おすすめ情報