
2次元配列で次のCSVファイルがあります。
フォームから入力したのですが、txtファイルには項目名(列名)が保存されていません。
taro,10,119
jiro,10,90
hanako,9,120
momoko,11,98
saburo,12,111
natuyo,10,130
sirou,8,88
このデータを年齢順、及び身長順に並べ替えをしたいのです。
列の名前がないので、手動でtxtファイル1行目に
simei,toshi,shinchou
と追記して
01: <?php
02: $data = "c:\××\××\shinchou.txt";
03: $array = file($data);
04: foreach($array as $key => $row){
05: $toshi[$key] = $row["toshi"];
06: $shinchou[$key] = $row["shinchou "];
07: }
08: print_r($array);
09: array_multisort($toshi,SORT_ASC, $shinchou,SORT_ASC, $array);
10: ?>
と実行しましたが、
Array ( [0] => simei,toshi,shinchou [1] => taro,10,119 ・・・・と、print_r($array)の結果が出るだけで、ソートが出来ません。
CSVファイルで項目名(列名)が無い場合の並べ替えはどのようにすれば良いでしょうか。
mySQLなどを利用しないと並べ替えは出来ないでしょうか。
No.2ベストアンサー
- 回答日時:
並べ替えのルールがはっきりしませんが、サンプルコードを見る限り、
まず年令順で並べ替えて同じ年令なら身長順にする、ということであっていますか?
その場合、
<?php
$data = "c:\××\××\shinchou.txt";
$array = file($data);
$ret = array();
$toshi = array();
$shinchou = array();
foreach($array as $k=>$v){
$ret[$k] = explode(',', trim($v));
$toshi[$k] = $ret[$k][1];
$shinchou[$k] = $ret[$k][2];
}
array_multisort($toshi,SORT_ASC,$shinchou,SORT_ASC,$ret);
print_r($ret);
?>
でいけると思いますよ。
サンプルコードがだめなのは、
・$arrayが多次元になっていない
・print_r()の場所がarray_multisortより前になっている
・1行目にヘッダ行を挿入してもfileの返り値の配列のキーになるわけではない
あたりですかね。
貴サンプルを動かしたら期待通りの結果を得ることが出来ました。
>サンプルコードがだめなのは、
>・$arrayが多次元になっていない
成程・・・、納得です。
貴サンプルを良く咀嚼するとともに、心して、再度、基礎知識の定着に努めることにします。ご指導有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- その他(プログラミング・Web制作) listへのappendが出来ない件 1 2022/12/06 21:44
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- PHP 値の取り出し方について教えて下さい。 1 2023/03/31 13:30
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
np.stack()とnp.array()の違い
-
行列
-
多次元配列をエンコードする関...
-
mb_encode_numericentityでタグ...
-
読み(あ行~わ行)ごとに分け...
-
System.String.Splitでエラー
-
delphi 2次元配列がわかりません
-
pythonのnumpyでの繰り返しでの...
-
構造体を動的に確保&解放
-
verilogで、配列の一部をタスク...
-
濁点のソート
-
cakephpでのトランザクション処...
-
Delphiで別unitで宣言した「TAr...
-
Texでの数式
-
PHPでCSVを出力するさいに、ル...
-
ファイルの書き込みについて教...
-
$_SESSIONに二次元配列を使える...
-
CSVデータを使ったページングと...
-
String だと「 ByRef引数の型が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
行列
-
CArrayの要素としてCStringArra...
-
Texでの数式
-
読み(あ行~わ行)ごとに分け...
-
CArrayのソート
-
C言語 最大値と最小値を求めて...
-
fgetc関数について
-
PHPのmin関数、「1」以上の数値...
-
連想配列の文字コードを変換
-
STLのvectorで作った配列をメン...
-
C言語のchar ポインタ
-
C言語で全角文字の扱いについて
-
配列を指定した順序でソート
-
php で1から100までの素数の表...
-
delphi 2次元配列がわかりません
-
np.stack()とnp.array()の違い
-
array_intersectで空欄を比較し...
-
cakephpでのトランザクション処...
-
verilogで、配列の一部をタスク...
おすすめ情報