Tag Archives: web

PHP: Sorting a Multi-Dimensional Array

titolo in italiano:

Ordinamento di un array-multidimensionale in PHP

Oggi ho avuto la necessità di ordinare un array multidimensionale in PHP; un array di array in questo formato:

1
2
3
4
5
6
7
8
9
//an array of some songs I like
$songs =  array(
'1' => array('artist'=>'The Smashing Pumpkins', 
'songname'=>'Soma'),
'2' => array('artist'=>'The Decemberists', 
'songname'=>'The Island'),
'3' => array('artist'=>'Fleetwood Mac', 
'songname' =>'Second-hand News')
);

Sempre per il principio di non re-inventare la ruota, googlando un pò è saltata fuori questa funzione su firsttube:

Tuttavia a me serviva qualcosa di un pò più evoluto, che mi consentisse non solo di scegliere la chiave dell’array sulla quale ordinare, ma anche il verso dell’ordinamento.

1
2
3
4
5
6
7
8
9
10
11
12
13
function subval_sort($a,$subkey) 
 {
  foreach($a as $k=>$v) {
    $b[$k] = strtolower($v[$subkey]);
  }
  asort($b);
 
  foreach($b as $key=>$val) 
  {
    $c[] = $a[$key];
  }
  return $c;
}

Di seguito la mia estensione:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function subval_sort($a,$subkey,$sortOrder) 
 {
  foreach($a as $k=>$v) {
    $b[$k] = strtolower($v[$subkey]);
  }
  if($sortOrder == "asc")
    asort($b);
  else if($sortOrder == "desc")
    arsort($b);
  foreach($b as $key=>$val) 
  {
    $c[] = $a[$key];
  }
  return $c;
}

Related Posts:

Chrome OS Good OS

Nel giorno in cui le più diffuse applicazioni Google (leggasi Gmail, Calendar, Reader) escono dalla fase beta, è stato annunciato per metà 2010 l’uscita di Chrome OS.

Basato sul kernel Linux, l’idea di base è sicuramente rivoluzionaria. Non dovremo più installare migliaia di applicazioni, rischiando di sputtanare il sistema, ma accederemo alle stesse su web – avremo a che fare con un sistema completamente web-oriented.

Resta da capire come faranno le milioni di persone che a tuttoggi sono legati a doppia mandata ai sistemi windows, sia per la generazione di documentazione, sia per la gestione di applicazioni (che poi, fondamentalmente, è il problema che ad oggi relega i sistemi *nix-like ad un contesto molto piccolo).

Related Posts:

Gazzetta dello Sport: nuovo layout

Dal giorno successivo alla seconda semifinale di Champions League tra Chelsea e Barcellona, la Gazzetta dello Sport ha deciso di rinnovare il proprio layout grafico.

Prima di iniziare a commentare il lavoro svolto, vorrei criticare la scelta di far andare offline il sito la sera della semifinale. Quanti contatti avranno perso? Anche il sottoscritto, subito dopo il fischio finale, si era recato sul loro sito per leggere i commenti in merito alle polemiche post-partita. Considerato che il loro sito gazzetta.it era offline, decisi di redirigermi sul sito del Corriere dello Sport (e chissà quanti altri utenti avranno seguito questa strada).

Detto questo.

La prima cosa che salta subito all’occhio è la prima modifica sostanziale e cioè l’aver deciso di passare da una lettura ed una navigabilità orizzontale, verso una lettura ed una navigabilità che si sviluppa in orizzontale verticale.

Il sito adesso è molto più pubblicità-centrico di quanto non lo fosse già in precedenza: difatti, per poter leggere la prima notizia (e cioè quella collegata alla fotonotizia spostata a sinistra) bisogna per forza di cose scrollare la pagina (quantomeno quando ci si collega la prima volta, compare un fastidioso banner su sfondo blu).

Mi trovo d’accordo con Kobayashi quando dice che in generale tutto il layout è troppo schiacciato, il che rende difficilmente consultabili le notizie pubblicate sul giornale sportivo più letto in italia.

E’ apprezzabile lo sforzo di renderlo web2.0 per alcuni aspetti: i bordi arrotondati del blocco all’interno del quale vengono inseriti i contenuti; i piccoli tab verticali, posti sulla sinistra, che rimandano ad alcune sotto-sezioni del sito (gazzatown, la versione mobile, sportlinx).

Infine, come tanti altri siti (anche di grandi dimensioni), è stucchevole la non curanza nell’attenersi agli standard w3c (sia a livello HTML che CSS).

Related Posts:

strill.it: sempre down

Non è servito a nulla nè il restyling grafico nè tantomeno quei giorni di down per aggiornare il loro servizio di hosting (credo).
Attualmente sul sito di strill campeggia laconico:

Database Error: Unable to connect to the database:Could not connect to MySQL

Related Posts:

Ajax, AIR e Silverlight

Ottima digressione di Alberto sull’evoluzione del web, dagli albori fino ai giorni nostri.

Mi trovo completamente daccordo con lui. Aggiungo al suo ragionamento due punti:

a) tutto questo fiorire di framework, che con due click ti consentono di creare pagine web anche piuttosto complesse, sta pian piano sminuendo la figura dello sviluppatore;

b) l’unico punto che avrei forse approfondito nella digressione, è quello relativo a Java. Credo che attualmente, il punto di forza di Java su Web non sia tanto il linguaggio o il motore che ci sta dietro, quanto il fatto di poter contare su tutta una schiera di framework rilasciati dal progetto apache (vedi Cocoon, vedi Struts) e non (vedi Hibernate).

Related Posts:

IE8 compatibility mode

Grazie ad una segnalazione di visik su twitter, scopro questo interessante post sulla compatibility mode di IE8, pubblicato da IEBLOG.

Il concetto di fondo è questo: a prescindere dal Quirks mode, pare che IE8 seguirà un suo standard per l’interpretazione di CSS ed HTML e via discorrendo – ci sarà la possibilità di tornare alla modalità IE7 tramite apposito tag meta.

Già ora, noi che sviluppiamo su web, dobbiamo testare su Firefox 2.x, IE6.x, IE7 .. non ci resterà che aggiungere anche IE8 ai nostri test … Ringraziamo M$ per questo ennesimo regalo.

Related Posts:

Css selectors

Oggi mi si è presentato questo problema.

Stavo realizzando una pagina php che deve visualizzare una tabella contenente determinati oggetti grafici (chiamiamoli pure immagini).
La tabella possiede due righe: la prima deve essere sempre visualizzata; la seconda, invece, deve essere visualizzata solo quando si passa sopra la prima riga con il mouse.

Realizzarlo è abbastanza banale via javascript:

var type = "IE"
//detects the capabilities of the browser
function BrowserSniffer() {
//Opera
if (navigator.userAgent.indexOf("Opera")!=-1 
&& document.getElementById) type="OP"
 
//Internet Explorer e.g. IE4 upwards
else if (document.all) type="IE"
 
//Netscape Communicator 4
else if (document.layers) type="NN"
 
//Mozila e.g. Netscape 6 upwards
else if (!document.all && document.getElementById) type="MO"
 
//I assume it will not get here
else type = "IE"
}
function ShowLayer(id, action) {
if (type=="IE") eval("document.all." 
+ id + ".style.visibility='" + action + ";'");
if (type=="NN") eval("document."; 
+ id + ".visibility='" + action + "'");
if (type=="MO" || type=="OP")
eval("document.getElementById('" 
+ id + "').style.visibility='" + action + "'");
}

Ma il problema in sè non è questo.
Il problema è che la seconda riga di questa tabella, contiene un id testuale, ma unico perchè associato ad un numero progressivo.
Esempio:

<tr>
<td>qualcosa</td>
<td>qualcos'altro</td>
</tr>
<tr>
 <td>qualcosa</td>
 <td>qualcos'altro</td>
 </tr>
<tr>
 <td>qualcosa</td>
 <td>qualcos'altro</td>
 </tr>
<tr>
  <td>qualcosa</td>
  <td>qualcos'altro</td>
</tr>

Tramite css, quindi, si vuole rendere invisibile la riga con un id il cui valore contenga pippo seguito da un numero. Dopo un’accurata lettura del reference sui selettori forniti da css, ho risolto così:

TR[id] { visibility: hidden; }

Sinceramente non è proprio ciò che mi aspettavo, perchè questo implica che se mai mi verrà in testa di apporre un id ad una riga html, questa non verrà visualizzata. Cercavo, piuttosto, una cosa del tipo:

TR[id~=pippo*] { visibility: hidden; }

pare, però, che non si possa fare.
Se volete consultare un’utile tabella sui selettori disponibili, vi consiglio di visitare questo sito.

Related Posts: