Autor | Zpráva | ||
---|---|---|---|
h4ever Profil * |
#1 · Zasláno: 1. 5. 2013, 17:59:06
Mám dvě pole. To pole ve kterém se má provést změna je zde:
Array ( [0] => Array ( [0] => Archers [1] => 4,5,24,39,474,492 ) [1] => Array ( [0] => Arrows [1] => 54,97,245,246,315,316,317,318,319,320,321,322,328,360,363,364,367,372,375,378,381,385,466,470,471,475,476,477,478,485,503,504,505,507,509,510,511,512,514,516,517,518,519,521,522,523,524,525,537,538,540,541,627,628,746,747,786,787 ) [2] => Array ( [0] => Betas [1] => 76,158,299,444,479,493,544,571,573,575,577,748,749 ) Nechci ale třídit řádky. Jde mi o setřídění array->0->1, ty čísla které jsou na druhé úrovni pod indexem 1. Druhé pole, podle kterého se má třídit $units_id_all_ordered_by_name = array(536,497,0,844,493,169,197,492,496,177,4,686,687,3,87,10,14,9,97,322,312,360,315,316,317,318,319,320,321,328,485,778,777,535,682,730,12,498,132); Chtěl jsem použit funkci, na to abych setřídil array_multisort($units_id_all_ordered_by_name, SORT_ASC, $arr); Problém je ale v tom, že ty dvě pole nemají stejnou délku. |
||
h4ever Profil * |
#2 · Zasláno: 1. 5. 2013, 19:32:22
Může někdo poradit s tímto kódem? Prakticky by to mělo by skoro hotové, jenže mi to píše že pole jsou nekonzistentní:
zdroj dat: http://pastebin.com/16Upx1kU script: <?PHP /**************************** ** GET UNITS ARRAY ** ***************************/ $contents = @file_get_contents("data_aok.xml"); $xml = @simplexml_load_string($contents); foreach($xml->civ->protounit as $key=>$Obj) $arr1[(string) $Obj["id"]]=(string) $Obj["name"]; /************************ ** GET GROUPS ** ***********************/ $contents = @file_get_contents("data_aok.xml"); $xml = @simplexml_load_string($contents); foreach($xml->unitgroups->group as $key=>$Obj) { $temp = array( (string) $Obj["name"], array( 1 => null, 2 => null ) ); foreach ( explode(",", (string) $Obj["units"] ) as $key => $val ): $temp[1][1][$key]=$val; $temp[1][2][$val]=$arr1[$val]; endforeach; // $temp[2]=implode(";", $temp[2]); $arr[]=$temp; } foreach($arr as $key=>$obj): $ids[1] = $obj[1][1]; $names[1] = $obj[1][2]; array_multisort($names, SORT_ASC, $ids, SORT_ASC, $obj[1]); $arr[$key][1]=$names; endforeach; print_r($arr); ?> První část získá názvy jednotek (pole arr1). Druhá část pak získává data týkající se skupin, a současně vytváří pole s názvy jednotek (pole arr). Arr tedy obsahuje vícerozměrná pole, která potřebuji uspořádat. O to se snažím v posledním cyklu. Hlavně vytáhnout jména $names a podle těch se má seřadit druhý "sloupec" s "ídéčkami" ids. Tedy v rámci pole arr. Nevím v čem je ta nekonzistence. |
||
h4ever Profil * |
#3 · Zasláno: 1. 5. 2013, 22:07:40
Podle příkladu 2 v manuálu jsem provedl toto:
foreach($arr as $key=>$obj): $arr[$key][1][1]; $arr[$key][1][2]; array_multisort($arr[$key][1][2], SORT_ASC, $arr[$key][1][1], SORT_ASC); endforeach; Pole se zdají být správně uspořádány, ale na začátku je jedna chybová hláška, že neodpovídají rozměry pole. Tak to ladím: $i=0; foreach($arr as $key=>$obj): $i++; $arr[$key][1][1]; $arr[$key][1][2]; array_multisort($arr[$key][1][2], SORT_ASC, $arr[$key][1][1], SORT_ASC); if ($i == 17) { echo "<h1>$i</h1>"; print_r($arr[$key][1][1]); print_r($arr[$key][1][2]); } endforeach; A dostávám toto: <h1>17</h1>Array ( [0] => 411 [1] => 348 [2] => 349 [3] => 351 [4] => 350 [5] => 414 [6] => 413 [7] => 415 [8] => 809 [9] => 399 [10] => 400 [11] => 401 [12] => 402 [13] => 403 [14] => 404 [15] => 405 [16] => 406 [17] => 407 [18] => 408 [19] => 409 [20] => 410 [21] => 284 ) Array ( [0] => Forest Tree [1] => Forest, Bamboo [2] => Forest, Oak [3] => Forest, Palm [4] => Forest, Pine [5] => Jungle Tree [6] => Snow Pine Tree [7] => Stump [8] => Stump 2 [9] => Tree A [10] => Tree B [11] => Tree C [12] => Tree D [13] => Tree E [14] => Tree F [15] => Tree G [16] => Tree H [17] => Tree I [18] => Tree J [19] => Tree K [20] => Tree L [21] => Tree TD ) <br /> <b>Warning</b>: array_multisort() [<a href='function.array-multisort'>function.array-multisort</a>]: Array sizes are inconsistent Takže nechápu kde může být jaký nekonzistence, když to jako vypadá všechno OK. Co myslíte? |
||
tiso Profil |
#4 · Zasláno: 2. 5. 2013, 09:21:57
h4ever: prvých 17 cyklov prebehne v poriadku, nekonzistentné je to až niekedy potom.
|
||
Časová prodleva: 11 let
|
0