» »

PHP sortiranje Arraya

PHP sortiranje Arraya

*ziga* ::

Zivjo.Imam problem.Npr da imam array ime & starost

Jure 12
Miha 17
Jaka 11

In jaz bi jih sortiral po starosti(vrjetno s sort()).To ze znam narediti ampak problem je kako bi potem ohranil ime pri letih?

NavadniNimda ::

Uporabi dva arraya hkrati, enega za imena, drugega za leta.

wind ::

asort
w

SeTAr ::

$arr = array(
  array("ime" => "Jure", "starost" => 12),
  array("ime" => "Miha", "starost" => 17),
  array("ime" => "Jaka", "starost" => 11)
);

function cmp(a, b){
  strnatcmp($a["starost"], $b["starost"]); 
}

usort($arr, "cmp");

MrBrdo ::

Prav za tvoj primer bi blo verjetno to najboljše:
$arr = array("Jure 12", "Miha 17", "Jaka 11");
function cmp($a, $b) {
  preg_match('/\\d+$/', $a, $ma);
  preg_match('/\\d+$/', $b, $mb);
  if ($ma[0] == $ma[1]) return 0;
  return (intval($ma[0]) < intval($mb[0])) ? -1 : 1;
}
usort($arr, "cmp");
print_r($arr);

Kot pa je že nekdo zgoraj nakazal bi bilo bolje če bi imel ime in starost posebej. V tejle moji kodi zna bit tudi problem, če tisti string slučajno nebi bil pravilnega formata (številka na koncu). Potem bi moral še kakšno vrstico error handlinga dodat ampak you get the point.
MrBrdo

Zgodovina sprememb…

  • spremenilo: MrBrdo ()

Gost ::

PHP tega nima v osnovnih funkcijah. Zato moraš napisati svojo.

<?php
function sort2d( &$arrIn, $index = NULL, $sort = 'asort') {
	// pseudo-secure--never allow user input into $sort
	if (strpos($sort, 'sort') === false) {$sort = 'asort';}
	$arrTemp = array();
	$arrOut = array();

	foreach ( $arrIn as $key=>$value ) {
		$arrTemp[$key] = is_null($index) ? reset($value) : $value[$index];
	}

	$sort($arrTemp);

	foreach ( $arrTemp as $key=>$value ) {
		$arrOut[$key] = $arrIn[$key];
	}

	$arrIn = $arrOut;
}
$array = array(
	array(Jure, 12),
	array(Miha, 17),
	array(Jaka, 11)
);

sort2d($array, 1);
var_dump($array);
?>


Tako funkcijo najdeš med komentarji na php.net.

keworkian ::

Madona kaksne komplikacije za tako brezvezno rec. Ljudje na php.net res nimajo drugega dela.
Obscenities in B-Flat

Gost ::

keworkian je izjavil:

Madona kaksne komplikacije za tako brezvezno rec. Ljudje na php.net res nimajo drugega dela.


Imaš kakšno rešitev zgornjega problema, konstruktivni predlog ali ti je samo dolgčas in lameaš po forumu? Spizdi v ložo.

keworkian ::

Samo zate Gost.

$t = array("Jure 12",
"Miha 17",
"Jaka 11","Samir 25","Janko 123", "Stanko 443");

$s = array();
foreach($t as $g)
{
  preg_match("#([a-zA-Z]{4,})?\s(\d{2,})#",$g, $m);
  $s[$m[2]] = $m[1];
}
ksort($s,SORT_NUMERIC);
print_r($s);
Obscenities in B-Flat

Zgodovina sprememb…



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

php array in path določenega keya:

Oddelek: Izdelava spletišč
151177 (1005) HardFu
»

[java] funkcija ekvivalentna print_r v PHP

Oddelek: Programiranje
161439 (1202) sverde21
»

[PHP] primerjava besed v stavkih

Oddelek: Programiranje
6936 (823) rokpok
»

HTML forma in datum

Oddelek: Izdelava spletišč
131606 (1342) Muzo
»

php in preg_replace - regex kako zajeti tekst med <script in .. </script

Oddelek: Programiranje
6880 (789) blackmumba

Več podobnih tem