La funzione PHP usort() vista in WordPress: ordinare una serie di post per un campo qualsiasi può essere utilizzata facilmente anche per ordinare array di array. Ad esempio se abbiamo:
1 2 3 4 5 6 7 8 9 |
La funzione PHP usort() vista in WordPress: ordinare una serie di post per un campo qualsiasi può essere utilizzata facilmente anche per ordinare array di array. Ad esempio se abbiamo:
1 2 3 4 5 6 7 8 9 |
Uno dei vantaggi dei file Property list, che altro non sono che file testuali che seguono lo standard XML, è quello di poter essere trasformati istantaneamente in oggetti (come array o dictionary) Objective-C. Quando si crea un file Property list:

Per memorizzare un’immagine nelle NSUserDefaults è sufficiente riuscire ad ottenere un puntatore NSData ai dati dell’immagine. In questo modo potremmo ricostruire la nostra immagine in qualsiasi momento successivo.
Nell’esempio mostrato qui sotto viene sfruttato un array che contiene al massimo 4 immagini. Ogni immagine nuova viene messa in testa e quella in eccesso eliminata.
Come molti programmatori usano fare, anch’io mi costruisco le mie librerie di funzioni pronte per essere riutilizzate in più progetti e in più contesti. Lasciatemi passare il titolo di questo post, forse un po’ azzardato ma, tuttavia, come vedremo, non lontano dalla realtà.
In Objective-C è possibile scrivere e chiamare codice C/C++, compreso l’assembly se è per questo. Questa sua caratteristica lo rende un linguaggio davvero versatile e, per certi aspetti, fenomenale. Da un lato, infatti, è possibile utilizzare e apprezzare la sintassi prettamente Objective-C, dall’altro è possibile eseguire velocemente porting di codice scritto in ANSI C (magari per Digital Unix o Sun) e utilizzarlo comodamente nelle nostre applicazioni iPhone o iPad; per non parlare di tutto il Kernel BSD già disponibile su Mac OS X!
Potrebbe non capitarvi mai di dover aggregare le singole tag cloud in WordPress MU. Inoltre, in determinati contesti, potrebbe non aver senso mostrare una “nuvola” con le tag di blog eterogenei. Tuttavia, nel caso remoto che a qualcuno servisse, ecco un modo semplice di mostrare una tag cloud aggregata.
Avevo parlato già di come realizzare il metodo shuffle() in Javascript e Actionscript. Mi sono accorto, tuttaavia, di non aver sottolineato che anche Actionscript è in grado di estendere, nel medesimo modo di Javascript, il proprio oggetto Array:
In PHP esiste una comoda funzione chiamata shuffle() che permette di mescolare un array (vedi Very short trick: prendere elementi casuali da un array in PHP). Un’ottima versione per Javascript l’ho trovata qui. Qui sotto il codice leggermente rivisto:
La funzione shuffle() di PHP “mescola” letteralmente gli elementi di un array:
La funzione wp_parse_args() (come molte altre non documentata) elabora una stringa nel formato:
1 | var1=value1&var2=value2...varn=valuen |
Qualcuno sostiene che la programmazione è un arte e, in ultima analisi, non posso che essere d’accordo soprattutto quando si scovano soluzioni estremamente diverse per un medesimo problema. Per capire quanto sia vero questo, ecco come un’identica necessità nel medisimo linguaggio (Javascript) può essere risolta con approcci assolutamente diversi ed originali.
Un numero, ma il discorso è valido anche per una qualsiasi stringa, come 123 può essere riempito a sinistra – per pareggiarlo – con un certo numero di zeri, ad esempio: 00123. Questa necessità si presenta in varie occasioni e risulta utile per incolonnare – o comunque mostrare – un numero in maniera pulita, indicandone implicitamente il suo valore massimo. Nei videogame, ad esempio, il classico punteggio (lo score) viene spesso indicato con 001234, indicando che al massimo si arriverà a 999999. Ecco come lo stesso problema è stato risolto da vari sviluppatori:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /** * Left Pad String * * @from http://snipplr.com/view/8423/left-pad-string/ * @author-web http://www.mechanicmatt.com/ * * @param num - Striga da riempire * @param totalChars - Numero totale di caratteri, comprensivo degli "zeri" * @param padWidth - Carattere usato per riempire, default "0" */ function leadingZeros(num, totalChars, padWith) { num = num + ""; padWith = (padWith) ? padWith : "0"; if (num.length < totalChars) { while (num.length < totalChars) { num = padWith + num; } } else {} if (num.length > totalChars) { //if padWith was a multiple character string and num was overpadded num = num.substring((num.length - totalChars), totalChars); } else {} return num; } alert(leadingZeros("asdf", 10, "0")); |
Questa soluzione è estremamente articolata, tuttavia permette di aggiungere un numero indefinito di 0 al numero num scegliendo anche il tipo di carattere da usare tramite padWidth, invece del default 0.
Decisamente originale, invece, questa soluzione:
1 2 3 4 5 6 7 8 9 10 11 12 13 | /** * string_pad * * @from http://snipplr.com/view/700/stringpad/ * @author http://d.hatena.ne.jp/brazil/20060721/1153489937 * * @param str - Striga da riempire * @param len - Numero totale di caratteri, comprensivo degli "zeri" * @param ch - Carattere usato per riempire */ function pad(str, len, ch){return new Array(len-(''+str).length+1).join(ch) + str} alert(pad(56, 4, '0')); // 0056 |
Stesso risultato, con un approccio completamente diverso. Anche in questo caso abbiamo la possibilità di decidere il numero di caratteri padding tramite il parametro len e il tipo di carattere da usare tramite ch. Manca però l’uso del default previsto nella precedente funzione.
Quella che uso io, invece…:
1 2 3 4 5 6 7 8 9 10 11 12 | /** * string_pad * * @author Giovambattista Fazioli * @web http://www.undolog.com * * @param s - Striga da riempire * @param l - Stringa che indica sia il carattere che la lunghezza * ad esempio "0000" = carattere "0" lunghezza 4 */ function padding(s,l) { return( l.substr(0, (l.length-s.length) )+s ); } alert( padding('123','0000') ); |
Se avete altre soluzioni interessanti non esitate a commentare
Ultimi Commenti
Marco: Ti ringrazio moltissimo, mi hai illuminato
ho risolto impostando [cc_objc] //OptionViewController.m -...
Giovambattista Fazioli: @Marco: Ti consiglio un approccio credo più corretto. Se hai eseguito il subclass del tab...
Marco: Scusa lo spam.. ho notato che c’è un errore.. ecco la correzione [cc_objc] /** PrimaClasse.h **/ #import...
Marco: dimenticato.. in [cci]OptionViewController[/cci ] il [cci]@syntetize[/cci] del delegato l’ho messo
luigi: molto chiaro e semplice devo ammettere che anche scrivendo da un pà difficilmente uso delegati creati da...