配列の並びについて

このQ&Aのポイント
  • 配列要素が思うように並んでくれません。
  • (1)のような配列を(2)のように配列要素を記述した順番で出力したいのですが、可能かどうか教えてください。
  • 自動的にソートされてArray([001]=>XXX [002]=>XXX [003]=>XXX)となります。
回答を見る
  • ベストアンサー

配列の並びについて

配列要素が思うように並んでくれません。 (1)のような配列を(2)のように配列要素を記述した順番で出力したいのですが、可能かどうか教えてください。 (1) $ary=array( "001"=>array("en"=>"TOYOTA","jp"=>"トヨタ"), "003"=>array("en"=>"HONDA","jp"=>"ホンダ"), "002"=>array("en"=>"NISSAN","jp"=>"日産") ); (2) Array([001]=>XXX [003]=>XXX [002]=>XXX) ↑このように出力したいのですが、自動的にソートされて Array([001]=>XXX [002]=>XXX [003]=>XXX)となります。 よろしくご教授下さい。お願いします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

自動的にソートはされません。 普通に作成順に表示されます。 (2)の番号順とはどのような処理でだしたのかソースを 簡便に書いてください。 <?PHP $ary=array( "001"=>array("en"=>"TOYOTA","jp"=>"トヨタ"), "003"=>array("en"=>"HONDA","jp"=>"ホンダ"), "002"=>array("en"=>"NISSAN","jp"=>"日産") ); print_r($ary); print "<hr>"; foreach($ary as $key1=>$val1){ foreach($val1 as $key2=>$val2){ print "{$key1}:{$key2}:{$val2}<br>"; } } ?>

briantaphy
質問者

お礼

ご回答ありがとうございました。解決しました。お恥ずかしい話ですがつまらないミスが原因でした。お時間をとらせてしまったことお詫びいたします。 $ary=array( "001"=>array("en"=>"TOYOTA","jp"=>"トヨタ"), "002"=>array("en"=>"NISSAN","jp"=>"日産"), "003"=>array("en"=>"MITUSBISHI","jp"=>"三菱"), "002"=>array("en"=>"HONDA","jp"=>"ホンダ"), ); 実はこのようなことでした。 ホンダのインデックスを"002"とし、配列要素の一番後ろに配置しようとしていたのですが、同じインデックスを日産にも指定していたため、print出力したときに Array([001]=>トヨタ [002]=>ホンダ [003]=>三菱・・・・・) と表示され、自動的にソートされるものだと勘違いしておりました。 再度、お手数をお掛けいたしましたことお詫び申し上げます。ありがとうございました。

関連するQ&A

  • 連想配列を array_multisort() でphp4、php5の違い

    いつもお世話になります。 連想配列をarray_multisort()でソートしようとしています。 php5のサーバでは思うように動作するのですが、 php4のサーバでは、ソートされません。 print_r($ary); Array ( [BuID] => 11 [BuName] => aaaa [yymmdd] => 080507 [DateDisp] => 08年05月07日(水) [DateType] => 1210086000 [TaikaiName] => AAAA [HRef] => [AnkName] => ) Array ( [BuID] => 12 [BuName] => bbbb [yymmdd] => 080822 [DateDisp] => 08年08月22日(金) [DateType] => 1219330800 [TaikaiName] => BBBBBBBB [HRef] => [AnkName] => ) ・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・ の様な連想配列をyymmddでソートしようとしています。 php5.2.6だと、 foreach($ary as $key => $row){ $yymmdd[$key] = $row['yymmdd']; } array_multisort($yymmdd,SORT_DESC,$ary); で、$aryにyymmddで並び替えられた配列が入ります。 しかし、php4.2.2では、ソートされず、もとの配列がそのまま$aryに入ってしまいます。 array_multisort()は、phpのバージョンによって動作が異なるような記載もありません。 どなたかわかる方見えましたらよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 2次元配列から条件抽出した要素の操作

    ある2次元配列から条件に合う要素だけ抜き出し、 抜き出した要素でまた2次元配列を作りたいのですがうまくいきません。 ary=[[3,7,5,6,],[4,7,3,9],[2,5,3,7],[8,1,4,3]] ary.each{|x| if x[1]>3 p x end } というかんじで条件抽出しているのですが、 ここで得た出力をまた [[4,7,3,9],[8,1,4,3]] というような2次元配列にしたいのですがやりかたがわかりません。

  • 2次元配列 ソート

    はじめまして。 FLASH8を使っています。 2次元配列のソートがうまくいかず困っています。 Array[0][0] = "かかか"; Array[0][1] = "ききき"; Array[0][2] = "くくく"; Array[1][0] = "あああ"; Array[1][1] = "いいい"; Array[1][2] = "ううう"; とあって2番目の要素(「ききき」「いいい」の部分です)をキーとしてArray[n]を昇順にソートしたいのです。 この場合結果としては、 Array[0][0] = "あああ"; Array[0][1] = "いいい"; Array[0][2] = "ううう"; Array[1][0] = "かかか"; Array[1][1] = "ききき"; Array[1][2] = "くくく"; となります。 ご存知の方がいらっしゃいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 多次元配列?配列のキー?変数の型?

    PHP勉強中のものです。 予定通りの動作にならんく四苦八苦しています。 どのように修正すれば予定通りになるのか考え方のアドバイスなどお願いします。 処理したいこと 変数$xxxの先頭の文字と最後の文字をsubstr()で取り出し$aaaと$bbbに別けそれぞれ代入しキーとして多次元配列に代入した配列要素を指定してechoで出力したい 試してみたこと $aaa1と$bbb1に直接整数を代入してみたところ、echoで出力された キーになる変数を整数型として変数に代入してみたが希望通りの動作にならなかった。 なにかアドバイス頂けると助かります。 $array = array( "0" =>array("あいうえお","かきくけこ"), "1" =>array("さしすせそ") ); $xxx = "0-1"; $aaa = substr($xxx,0,1); $bbb = substr($xxx,2); $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない $aaa1 = 0; $bbb1 = 1; echo $array[$aaa1][$bbb1]; //出力された $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない

    • ベストアンサー
    • PHP
  • Javascriptの配列の便利な処理

    Javascriptの配列で以下のような処理は自分で作らないといけないのでしょうか? var csv = 'A,B,C,D'; var ary new Array(); ary = csv.split(','); 要素の有無 true/false ary.exists('A') 結果 true 要素の削除 ary.delete('A') 結果 ary = ['B', 'C', 'D'];

  • PHP の スペースシップ演算子について

    お世話になります。 PHP の スペースシップ演算子について、使い方をネットで調べていましたら、次のようなコードを見つけました。 この中で、配列の並べ替えのための usort( ) のコールバック関数としている my_sort( ) の中で、<=> 演算子が使われています。この演算子は左側と右側のオペランドを比べて -1, 0, 1 のいずれかを返すということなのですが、この戻り値がどのように配列の要素を並べ替えるのに使われているのか、そのメカニズムが理解できません。 どなたか詳しく説明していただけると有難く思います。どうかよろしくお願いいたします。 function my_sort($a, $b) { return $a <=> $b; } $ary = array(4, 2, 8, 6, 1, 3); usort($ary, 'my_sort'); echo "<pre>"; print_r($ary); echo "</pre>"; この結果は 以下の様です。 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 6 [5] => 8 )

    • ベストアンサー
    • PHP
  • phpの配列を代入

    初めての質問です。 よろしくお願い致します。 phpの配列を代入する方法ですが $data("テスト1#テスト2#テスト3"); $ary= array("5874","9874"); $dataの結果を テスト15874テスト29874テスト3 特定の文字列に「#」に$aryを順番に代入したいのですがわかりません。 str_replaceでなさそうですし、どうすれんばいいのでしょうか?

    • 締切済み
    • PHP
  • 配列について。new Arrayの省略形?

    下記No.4さんのfilterのトコで分からないことがあるので教えてください http://okwave.jp/qa/q8217521.html (data.filter (isNotNull, ary), ary)は、 最終的に(["1", "5"], [0, 3])になると思うのですが、 それがどうして最後で[0, 3]になるのでしょうか? (["1", "5"], [0, 3])は、new Arrayの省略形でしょうか? この書き方の意味が分かりません。 多次元配列みたいになるのではなく、上書きされていく?

  • xmlから配列で取得したものを取り出したい

    as3初心者jpncan15といいます。 xmlから配列で取得したものをfunction外で取り出したいのですがどのようにすればいいのか悩んでいます。functionを調べたり配列を調べたり頭がかなり混乱中です。 お手数ですがご教授いただけますでしょうか? var ary:Array=new Array(); var ary_name:Array=new Array(); var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest("b.xml"); var xml:XML; loader.load(request); loader.addEventListener(Event.COMPLETE , XMLload); function XMLload(e:Event):void { xml = XML(e.target.data); num_txt.text = xml.item.length(); //xml件数をテキストフィールドへ入れる for each(var element:Object in xml.item.thumb) //配列に入れる {ary.push(element);} for each(var element_name:Object in xml.item.name) //配列に入れる {ary_name.push(element_name); trace(element_name);}//出力OK } //function外で配列を使用したい trace(ary[5]); trace(ary_name[2]);

    • ベストアンサー
    • Flash
  • 空の配列を削除して、詰めていく。

    データベースから値を取ってくるとき、全て、同じ値が入ってくる場合があります。 $a = array(100,100,100,100,100)というような。 これを、array_uniqueで重複している値を削除したのですが、その際、print_rで見ると、 Array ( [4] => 100 ) と表示されました。つまり、キーが0ではなく、4となってしまっています。 array_uniqueで帰ってきた値が複数なら、さらにsortすることで0から始まる配列として並び替えられるのですが、1つしか帰ってこないとsortをしても、キーは変わらないようです。 この値を表示させるとき、countで配列の数を数え、さらにfor文でcountの数だけ回し、print $i;で表示させるようにしているのですが、上記のようにarray_uniqueで1つの値しか帰ってこないと、ページに値がきちんと表示できなくなってしまいます。 これを解決するために、空の要素を削除して、空白でない要素のキーを前に詰めてくれるような関数などを探しているのですが、何か方法などありますでしょうか? Array ( [4] => 100 ) が Array ( [0] => 100 )となるようにしたいのです。 よろしくお願いいたします。

    • 締切済み
    • PHP