Vai al contenuto

[PHP] sort di array per chiave interna


elegos

Messaggi raccomandati

Salve a tutti!

Sto realizzando una cosuccia, e questa cosuccia mi sputa fuori un'array del genere:

array(
0 => array("name" => "test", "age" => 22),
1 => array("name" => "pippo", "age" => 44),
2 => array("name" => "ernesto", "age" => 33),
3 => array("name" => "catapecchia", "age" => 11),
...
);

La mia domanda è: come posso fare re-indexare l'array principale prendendo come riferimento la chiave interna "name"?

Grazie ;)

Link al commento
Condividi su altri siti

OK, la funzione che sto creando è la seguente:

	function getMembersList($sort = GUILD_SORT_NULL) {
	$return = array();
	foreach($this->xmlsheet->guildInfo->guild->members->character as $char) {
		switch($this->region) {
			case EU:
				$url = "http://eu.wowarmory.com/character-sheet.xml?";
				break;
			case US:
				$url = "http://www.wowarmory.com/character-sheet.xml?";
				break;
		}
		$return[] = array(
			"name" => utf8_decode($char["name"]),
			"gender" => (int)$char["genderId"],
			"raceid" => (int)$char["raceId"],
			"classid" => (int)$char["classId"],
			"level" => (int)$char["level"],
			"rankid" => (int)$char["rank"],
			"url" => $url.$char["url"],
			"achPoints" => (int)$char["achPoints"],				
		);
	}
	if($sort != GUILD_SORT_NULL) {
		switch($sort) {
			case GUILD_SORT_NAME:
				$rule = "name";
				break;
			case GUILD_SORT_GENDER:
				$rule = "gender";
				break;
			case GUILD_SORT_RACE:
				$rule = "raceid";
				break;
			case GUILD_SORT_CLASS:
				$rule = "classid";
				break;
			case GUILD_SORT_LEVEL:
				$rule = "level";
				break;
			case GUILD_SORT_RANK:
				$rule = "rankid";
				break;
			case GUILD_SORT_ACHP:
				$rule = "achPoints";
				break;
		}
		$sorting = array();
		foreach($return as $data) {
			$sorting[$data[$rule]][] = $data;
		}
		$return = array();

		ksort($sorting);
		foreach($sorting as $s => $group)
			$sorted[$s] = $group;

		foreach($sorted as $id => $rule_array) {
			foreach($rule_array as $array)
				$return[] = $array;
		}
	}
	return $return;
}

Nota che ho messo $sorting[$data[$rule]][] e non semplicemente $sorting[$data[$rule]] perché è possibile che il termine della chiave venga ripetuto più di una volta.

Questa "cosa" che ho implementato funziona, ma per caso esiste un metodo più elegante?

Grazie.

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...