Autor Zpráva
h4ever
Profil *
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
        )
(zkráceno)
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 *
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 *
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
h4ever: prvých 17 cyklov prebehne v poriadku, nekonzistentné je to až niekedy potom.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0