{"id":515,"date":"2007-05-06T04:10:51","date_gmt":"2007-05-06T11:10:51","guid":{"rendered":"http:\/\/www.gubatron.com\/blog\/2007\/05\/06\/php-ordenando-un-arreglos-de-objectos-y-utilizando-funciones-dentro-de-funciones\/"},"modified":"2007-05-06T04:10:51","modified_gmt":"2007-05-06T11:10:51","slug":"php-ordenando-un-arreglos-de-objectos-y-utilizando-funciones-dentro-de-funciones","status":"publish","type":"post","link":"https:\/\/www.gubatron.com\/blog\/php-ordenando-un-arreglos-de-objectos-y-utilizando-funciones-dentro-de-funciones\/","title":{"rendered":"PHP, ordenando un arreglo de Objetos, y utilizando funciones dentro de funciones."},"content":{"rendered":"<p><center><a href=\"http:\/\/flickr.com\/photos\/gubatron\/486226982\/\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/farm1.static.flickr.com\/194\/486226982_aa65be1753_o.png?w=640\" border=\"0\"\/><\/a><\/center><\/p>\n<p>No fue hasta que programe en Python que me habia pillado que podia definir funciones dentro de funciones en PHP. Hoy tuve que arreglar un defecto en el home de wedoit4you.com del cual algunos bloggers se estaban aprovechando para permanecer en el home. Los articulos aparecen ordenados por fecha de publicacion, y algunos estaban publicando con fechas en el futuro, inclusive abusando y poniendo fechas a fin de mes.<\/p>\n<p>So, en mi clase &#8220;BlogPost&#8221;, puse un metodo &#8220;getTimestamp()&#8221;, si la fecha interna en el objeto esta en el futuro, y no es uno de los blogs a los cuales les paso la gracia&#8230;<br \/>\nPenalizo la fecha del post, y le resto 24 horas a la ultima hora en que se actualizo el Blog.<\/p>\n<p>Pero esto no me resuelve por completo el problema puesto que los posts se leen direct tv de una tabla, y el query ordena por timestamp, el resultado de mi funcion &#8220;getPosts&#8221; es un arreglo de Objetos, y lo ideal era tener esos objetos ordenados dependiendo de la funcion &#8220;getTimestamp()&#8221; en cada objeto &#8220;BlogPost&#8221;<\/p>\n<p>La foto que ven arriba muestra como utilizo la funcion &#8220;usort&#8221; para ordenar (por referencia) el arreglo resultante. La funcion recibe una referencia al arreglo de objetos, y el nombre de una funcion a la cual hacer callback al momento de comparar. La funcion de callback debe recibir 2 objetos como parametro, y luego devolver un numero que represente si el primer parametro es menor o mayor que el segundo parametro. ( < que cero si es menor, cero si son iguales, > que cero si es mayor).<\/p>\n<p>En mi caso llame esta funcion &#8220;cmp&#8221;, pero no la defini afuera de la clase nisiquiera, la defini ahi mismo dentro de la funcion. Si ven la logica de mi funcion el resultado es alrevez puesto que quiero ordenar de manera decrescente.<\/p>\n<p>Espero que alguien haya leido esto si necesita ordenar arreglos.<\/p>\n<p>En cuanto al scoping de las funciones internas, no se que sucederia si hubiese otra funcion llamada igual en el path, supongo que el interprete busca primero en el stack, y encontraria la funcion definida dentro de la funcion actual. Imagino que al terminar de ejecutarse esta funcion, podria no estar diponible para mas nadie. Se que en python puedes hacer Clases dentro de clases, funciones dentro de funciones. En el caso de Clases dentro de Clases, puedes hacer.   Objeto.SubObjeto.metodo(), en el caso de funciones dentro de funciones, creo que no tiene sentido hacer algo como  Objeto.function.subFuncion(), ya que las funciones necesitan parametros, pero seria cuestion de probar a ver, quizas funciona, dado que en python todo es un objeto. Alguien que me eche el cuento para PHP.<\/p>\n<p>(el screenshot fue tomado de emacs en el terminal de OSX Tiger)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>No fue hasta que programe en Python que me habia pillado que podia definir funciones dentro de funciones en PHP. Hoy tuve que arreglar un defecto en el home de wedoit4you.com del cual algunos bloggers se estaban aprovechando para permanecer en el home. Los articulos aparecen ordenados por fecha de publicacion, y algunos estaban publicando [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[15,30,43,65],"tags":[],"class_list":["post-515","post","type-post","status-publish","format-standard","hentry","category-code","category-geeklife","category-linux","category-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5Unzf-8j","jetpack-related-posts":[{"id":85,"url":"https:\/\/www.gubatron.com\/blog\/2-programitas-utiles-mientras-desarrollas-en-linux\/","url_meta":{"origin":515,"position":0},"title":"2 programitas utiles mientras desarrollas en Linux","author":"gubatron","date":"December 29, 2004","format":false,"excerpt":"Para los desarrolladores que utilizan lenguajes de programacion como Perl, o PHP, a continuacion, un programita bien util. Supon que tienes un archivo .php donde tienes definidas un monton de funciones. Y no te acuerdas que funciones estaban ahi, lo mas probable es que tengas que abrir el archivo y\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":520,"url":"https:\/\/www.gubatron.com\/blog\/recordando-algoritmos-quicksort\/","url_meta":{"origin":515,"position":1},"title":"Recordando algoritmos, Quicksort","author":"gubatron","date":"May 17, 2007","format":false,"excerpt":"Leyendo no se que en internet, lei mencionar algo sobre preguntas de entrevistas de trabajo, y mencionaron que siempre es bueno saber como funciona Quicksort. Por algun motivo, el algoritmo de ordenamiento que siempre recuerdo es Bubble sort, pero todos sabemos que no es el mejor. So decidi repasar y\u2026","rel":"","context":"In &quot;Code&quot;","block_context":{"text":"Code","link":"https:\/\/www.gubatron.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":273,"url":"https:\/\/www.gubatron.com\/blog\/snowrss\/","url_meta":{"origin":515,"position":2},"title":"SnowRSS","author":"gubatron","date":"March 18, 2006","format":false,"excerpt":"SnowRSS SnowRSS is an RSS Aggregator engine I wrote in python (Licensed under the GPL). Currently it's been under use in wedoit4you.com and its stable. It can read RSS and ATOM feeds. It uses the feedparser python module, and the MySQLdb python module to do the job. DOWNLOAD You can\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":272,"url":"https:\/\/www.gubatron.com\/blog\/project-snowrss\/","url_meta":{"origin":515,"position":3},"title":"Project SnowRSS","author":"gubatron","date":"March 18, 2006","format":false,"excerpt":"SnowRSS is a GPL RSS Aggregator engine I wrote in python. Currently it's been under use in wedoit4you.com and its stable. It can read RSS and ATOM feeds. It uses the feedparser python module, and the MySQLdb python module to do the job. DOWNLOAD You can only download the code\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":407,"url":"https:\/\/www.gubatron.com\/blog\/papiros-de-calculo-ii-old-school-ucab\/","url_meta":{"origin":515,"position":4},"title":"Papiros de Calculo II &#8211; Old School UCAB","author":"gubatron","date":"December 5, 2006","format":false,"excerpt":"Cuando estaba en la escuela de Ingeniera, viendo Calculo II con el Prof. Luis Crespo, la cantidad de transformaciones trigonometricas, integrales inmediatas, y otros artifices matematicos que tenia que tener en mi cabeza fueron plasmados en esta hoja de papel, la encontre hoy en un bolsillo del estuche de mi\u2026","rel":"","context":"In &quot;Diary&quot;","block_context":{"text":"Diary","link":"https:\/\/www.gubatron.com\/blog\/category\/diary\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":15,"url":"https:\/\/www.gubatron.com\/blog\/detalles-de-perl-que-no-quiero-olvidar\/","url_meta":{"origin":515,"position":5},"title":"Detalles de Perl que no quiero olvidar","author":"gubatron","date":"October 24, 2004","format":false,"excerpt":"Quisiera dejar anotado en el blog, algunos detalles \u00fatiles que recuerdo aprend\u00ed finalmente cuando estuve programando en PERL para Straec Technologies. A modo de manejo de conocimiento, y para que esto quede indexado en los buscadores, voy a anotar aqui algunas m\u00e1ximas, y detallitos bien utiles cuando estas programando algo\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts\/515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/comments?post=515"}],"version-history":[{"count":0,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts\/515\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/media?parent=515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/categories?post=515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/tags?post=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}