phpの配列の並び替えの質問です。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2015/04/15 08:36:04
  • 終了:2015/04/15 23:04:40
id:yayayai

▼並び替え前の配列
array(4) {
["fillColor"]=>
array(27) {
[0]=>
string(7) "#052E79"
[1]=>
string(7) "#84AEFA"
[2]=>
string(7) "#E6EEFE"
[3]=>
string(7) "#E6EEFE"
[4]=>
string(7) "#E6EEFE"
[5]=>
string(7) "#E6EEFE"
[6]=>
string(7) "#E6EEFE"
[7]=>
string(7) "#E6EEFE"
[8]=>
string(7) "#E6EEFE"
[9]=>
string(7) "#E6EEFE"
[10]=>
string(7) "#E6EEFE"
[11]=>
string(7) "#E6EEFE"
[12]=>
string(7) "#E6EEFE"
[13]=>
string(7) "#E6EEFE"
[14]=>
string(7) "#E6EEFE"
[15]=>
string(7) "#E6EEFE"
[16]=>
string(7) "#E6EEFE"
[17]=>
string(7) "#E6EEFE"
[18]=>
string(7) "#E6EEFE"
[19]=>
string(7) "#E6EEFE"
[20]=>
string(7) "#E6EEFE"
[21]=>
string(7) "#E6EEFE"
[22]=>
string(7) "#E6EEFE"
[23]=>
string(7) "#E6EEFE"
[24]=>
string(7) "#E6EEFE"
[25]=>
string(7) "#E6EEFE"
[26]=>
string(7) "#E6EEFE"
}
["strokeColor"]=>
array(27) {
[0]=>
string(7) "#010917"
[1]=>
string(7) "#010917"
[2]=>
string(7) "#010917"
[3]=>
string(7) "#010917"
[4]=>
string(7) "#010917"
[5]=>
string(7) "#010917"
[6]=>
string(7) "#010917"
[7]=>
string(7) "#010917"
[8]=>
string(7) "#010917"
[9]=>
string(7) "#010917"
[10]=>
string(7) "#010917"
[11]=>
string(7) "#010917"
[12]=>
string(7) "#010917"
[13]=>
string(7) "#010917"
[14]=>
string(7) "#010917"
[15]=>
string(7) "#010917"
[16]=>
string(7) "#010917"
[17]=>
string(7) "#010917"
[18]=>
string(7) "#010917"
[19]=>
string(7) "#010917"
[20]=>
string(7) "#010917"
[21]=>
string(7) "#010917"
[22]=>
string(7) "#010917"
[23]=>
string(7) "#010917"
[24]=>
string(7) "#010917"
[25]=>
string(7) "#010917"
[26]=>
string(7) "#010917"
}
["data"]=>
array(27) {
[0]=>
string(2) "44"
[1]=>
string(2) "35"
[2]=>
string(2) "14"
[3]=>
string(1) "3"
[4]=>
string(1) "0"
[5]=>
string(1) "0"
[6]=>
string(1) "0"
[7]=>
string(1) "0"
[8]=>
string(1) "0"
[9]=>
string(1) "0"
[10]=>
string(1) "0"
[11]=>
string(1) "0"
[12]=>
string(1) "0"
[13]=>
string(1) "0"
[14]=>
string(1) "0"
[15]=>
string(1) "0"
[16]=>
string(1) "100"
[17]=>
string(1) "0"
[18]=>
string(1) "0"
[19]=>
string(1) "0"
[20]=>
string(1) "0"
[21]=>
string(1) "0"
[22]=>
string(1) "0"
[23]=>
string(1) "0"
[24]=>
string(1) "0"
[25]=>
string(1) "0"
[26]=>
string(1) "0"
}
["sort"]=>
array(27) {
[0]=>
string(4) "COL0"
[1]=>
string(4) "COL1"
[2]=>
string(4) "COL2"
[3]=>
string(4) "COL3"
[4]=>
string(5) "COL19"
[5]=>
string(5) "COL20"
[6]=>
string(5) "COL17"
[7]=>
string(5) "COL21"
[8]=>
string(5) "COL18"
[9]=>
string(5) "COL23"
[10]=>
string(9) "COL25OVER"
[11]=>
string(5) "COL25"
[12]=>
string(5) "COL24"
[13]=>
string(5) "COL16"
[14]=>
string(5) "COL22"
[15]=>
string(5) "COL13"
[16]=>
string(4) "COL7"
[17]=>
string(4) "COL6"
[18]=>
string(4) "COL5"
[19]=>
string(4) "COL4"
[20]=>
string(4) "COL8"
[21]=>
string(4) "COL9"
[22]=>
string(5) "COL14"
[23]=>
string(5) "COL12"
[24]=>
string(5) "COL11"
[25]=>
string(5) "COL10"
[26]=>
string(5) "COL15"
}
}

▼並び替え後
array(4) {
["fillColor"]=>
array(27) {
[0]=>
string(7) "#052E79"
[1]=>
string(7) "#84AEFA"
[2]=>
string(7) "#E6EEFE"
[3]=>
string(7) "#E6EEFE"
[4]=>
string(7) "#E6EEFE"
[5]=>
string(7) "#E6EEFE"
[6]=>
string(7) "#E6EEFE"
[7]=>
string(7) "#E6EEFE"
[8]=>
string(7) "#E6EEFE"
[9]=>
string(7) "#E6EEFE"
[10]=>
string(7) "#E6EEFE"
[11]=>
string(7) "#E6EEFE"
[12]=>
string(7) "#E6EEFE"
[13]=>
string(7) "#E6EEFE"
[14]=>
string(7) "#E6EEFE"
[15]=>
string(7) "#E6EEFE"
[16]=>
string(7) "#E6EEFE"
[17]=>
string(7) "#E6EEFE"
[18]=>
string(7) "#E6EEFE"
[19]=>
string(7) "#E6EEFE"
[20]=>
string(7) "#E6EEFE"
[21]=>
string(7) "#E6EEFE"
[22]=>
string(7) "#E6EEFE"
[23]=>
string(7) "#E6EEFE"
[24]=>
string(7) "#E6EEFE"
[25]=>
string(7) "#E6EEFE"
[26]=>
string(7) "#E6EEFE"
}
["strokeColor"]=>
array(27) {
[0]=>
string(7) "#010917"
[1]=>
string(7) "#010917"
[2]=>
string(7) "#010917"
[3]=>
string(7) "#010917"
[4]=>
string(7) "#010917"
[5]=>
string(7) "#010917"
[6]=>
string(7) "#010917"
[7]=>
string(7) "#010917"
[8]=>
string(7) "#010917"
[9]=>
string(7) "#010917"
[10]=>
string(7) "#010917"
[11]=>
string(7) "#010917"
[12]=>
string(7) "#010917"
[13]=>
string(7) "#010917"
[14]=>
string(7) "#010917"
[15]=>
string(7) "#010917"
[16]=>
string(7) "#010917"
[17]=>
string(7) "#010917"
[18]=>
string(7) "#010917"
[19]=>
string(7) "#010917"
[20]=>
string(7) "#010917"
[21]=>
string(7) "#010917"
[22]=>
string(7) "#010917"
[23]=>
string(7) "#010917"
[24]=>
string(7) "#010917"
[25]=>
string(7) "#010917"
[26]=>
string(7) "#010917"
}
["data"]=>
array(27) {
[0]=>
string(2) "44"
[1]=>
string(2) "35"
[2]=>
string(2) "14"
[3]=>
string(1) "3"
[4]=>
string(1) "0"
[5]=>
string(1) "0"
[6]=>
string(1) "0"
[7]=>
string(1) "100"
[8]=>
string(1) "0"
[9]=>
string(1) "0"
[10]=>
string(1) "0"
[11]=>
string(1) "0"
[12]=>
string(1) "0"
[13]=>
string(1) "0"
[14]=>
string(1) "0"
[15]=>
string(1) "0"
[16]=>
string(1) "0"
[17]=>
string(1) "0"
[18]=>
string(1) "0"
[19]=>
string(1) "0"
[20]=>
string(1) "0"
[21]=>
string(1) "0"
[22]=>
string(1) "0"
[23]=>
string(1) "0"
[24]=>
string(1) "0"
[25]=>
string(1) "0"
[26]=>
string(1) "0"
}
["sort"]=>
array(27) {
[0]=>
string(4) "COL0"
[1]=>
string(4) "COL1"
[2]=>
string(4) "COL2"
[3]=>
string(4) "COL3"
[4]=>
string(5) "COL4"
[5]=>
string(5) "COL5"
[6]=>
string(5) "COL6"
[7]=>
string(5) "COL7"
[8]=>
string(5) "COL8"
[9]=>
string(5) "COL9"
[10]=>
string(9) "COL10"
[11]=>
string(5) "COL11"
[12]=>
string(5) "COL12"
[13]=>
string(5) "COL13"
[14]=>
string(5) "COL14"
[15]=>
string(5) "COL15"
[16]=>
string(4) "COL16"
[17]=>
string(4) "COL17"
[18]=>
string(4) "COL18"
[19]=>
string(4) "COL19"
[20]=>
string(4) "COL20"
[21]=>
string(4) "COL21"
[22]=>
string(5) "COL22"
[23]=>
string(5) "COL23"
[24]=>
string(5) "COL24"
[25]=>
string(5) "COL25"
[26]=>
string(5) "COL25OVER"
}
}

並び替え後には、["sort"]の値のCOLXXの昇順で
["data"]["strokeColor"]["fillColor"]を並び替わっている状態です。

サンプルのソースいただけると助かります。
よろしくお願いします。

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4412ベストアンサー獲得回数18032015/04/15 10:38:22

ポイント100pt

こんな感じでしょうか。

<?php

// $data に、並べ替え対象のデータが入ってるとして...
$data = ...

// 並べ替え用の配列を作る 
$idx = [];
foreach ($data["sort"] as $s) {
    if (preg_match("/OVER$/", $s)) {
        $v = 99999;
    } else {
        $ss = substr($s, 3);
        $v = intval($ss);
    }
    $idx[] = $v;
}

// 並べ替え用の配列で、$data の四つの配列を並べ替え
array_multisort($idx, $data["fillColor"], $data["strokeColor"], $data["data"], $data["sort"]);

?>

["sort"] は、一ケタの場合があったり、"OVER" がついてたりで扱いにくいので、一旦、並べ替え用の数値の配列を作ります。
後は、array_multisort() を使って、一気に並べ替えをするだけです。
  → PHP: array_multisort - Manual

id:yayayai

ありがとうございました!おかげさまで解決しました。

2015/04/15 23:04:29

その他の回答(0件)

id:a-kuma3 No.1

a-kuma3回答回数4412ベストアンサー獲得回数18032015/04/15 10:38:22ここでベストアンサー

ポイント100pt

こんな感じでしょうか。

<?php

// $data に、並べ替え対象のデータが入ってるとして...
$data = ...

// 並べ替え用の配列を作る 
$idx = [];
foreach ($data["sort"] as $s) {
    if (preg_match("/OVER$/", $s)) {
        $v = 99999;
    } else {
        $ss = substr($s, 3);
        $v = intval($ss);
    }
    $idx[] = $v;
}

// 並べ替え用の配列で、$data の四つの配列を並べ替え
array_multisort($idx, $data["fillColor"], $data["strokeColor"], $data["data"], $data["sort"]);

?>

["sort"] は、一ケタの場合があったり、"OVER" がついてたりで扱いにくいので、一旦、並べ替え用の数値の配列を作ります。
後は、array_multisort() を使って、一気に並べ替えをするだけです。
  → PHP: array_multisort - Manual

id:yayayai

ありがとうございました!おかげさまで解決しました。

2015/04/15 23:04:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません