| 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: 13 let
|
|||
0