Leandro Vieira Pinho´s Blog

Just another WordPress weblog

Archive for 'php'

Função PHP para remover “keys” de um Array

January 26th, 2008. Published under array, php, unset. 6 Comments.

Acabei de criar um função em PHP para remover “keys” de um Array.

Considere o array abaixo:

$array = array (

'nome' => 'Leandro',

'sobrenome' => 'Vieira Pinho',

'email' => 'spam@efoda.com'

);

E considere também que você deseja excluir a key “email”, por exemplo. Portanto, o procedimento seria o seguinte:

unset( $array['email'] );

Logo, a estrutura do Array se modificaria com a ação executada. Resultando em:

$array = array (

'nome' => 'Leandro',

'sobrenome' => 'Vieira Pinho'

);

Quando houver necessidade de remover várias “keys” de um Array, utilizaremos várias vezes a função unset como exemplificado acima. Para simplificar meu trabalho, criei uma função intitulada como remove_key_from_array. Nela utilizo a função unset quantas vezes for necessário para remover as “keys” desejadas do um array, de acordo com os parâmetros passado à função.

Exemplo de uso da função considerando o array demonstrado acima.

print_r( remove_key_from_array( $array, array(’sobrenome’,'email’) ) );

O resultado seria:

Array ( [nome] => Leandro )

Abaixo o código da função.

/**
* This function remove specified key from a given array
*
* @version 0.1
* @author Leandro Vieira Pinho
* @date Saturday, January 26, 2008
* @param array $array Array that contains the keys to be removed
* @param mixed $keys String with the key name; or, an Array with the keys names
* @return array Return the given array without the specified key(s)
*/
function remove_key_from_array( $array, $keys )
{
if ( is_array( $keys ) )
foreach( $keys as $key )
unset( $array[$key] );
else
unset( $array[$keys] );
return $array;
}

[UPDATE]Nova versão. Obrigado Fernando pela sugestão. [/UPDATE]

/**
 * This function remove specified key from a given Array and reindex it, if wanted.
 *
 * @version 0.2
 * @author Leandro Vieira Pinho
 * @date Monday, January 28, 2008
 * @param array $array Given Array that contains the keys to be removed
 * @param array $keys Array with the keys names
 * @param boolean $reindex Use "true" if you want to reindex the given array or convert associative array in indexed; "false" is default.
 * @return array Return the given array without the specified key(s)
 */
function remove_key_from_array( $array, $keys, $reindex = false )
{
	$keys = (array) $keys;
	foreach( $keys as $key )
		unset( $array[$key] );
	return ( $reindex ) ? $array = array_values( $array ) : $array;
}

Se lhe for útil, faço bom proveito.

Função PHP para exibir uma string em singular ou plural

January 7th, 2008. Published under php. 4 Comments.

Num post anterior, falei sobre o Plugin Smarty para exibir uma string em singular ou plural que eu acabara de criar. Como alguns não utilizam o Smarty, adaptei o plugin de forma que ele possa ser utilizado como uma função PHP. Observe a forma de uso:

echo singular_plural(’%d Comentário’, ‘%d Comentários’, $totalComentarios);

No exemplo acima, será exibido “x comentário” se a variável, $totalComentarios, tiver um valor igual ou menor que 1. Caso contrário, ou seja, se variável, $totalComentarios, tiver um valor maior que 1 será exibido “x comentários”.

Abaixo segue o código da função:

/**

 * Shows a singular or plural message based in a informed number

 * How to use: singular_plural( '%d child', '%d children', 2 );

 *

 * @version 0.1

 * @date Monday, January 7, 2008

 * @author Leandro Vieira Pinho - http://leandrovieira.com

 */

function singular_plural( $strMsgSingular, $strMsgPlural, $intTotal )

{

 if ( $intTotal > 1 )

 	return sprintf( $strMsgPlural, $intTotal );

 	return sprintf( $strMsgSingular, $intTotal );

}

Até o próximo.

Plugin Smarty para exibir uma string em singular ou plural

January 7th, 2008. Published under php, smarty. 3 Comments.

Acabei de criar um plugin para o Smarty com o intuito de exibir o singular ou plural de uma frase, por exemplo, basedo num número informado. A utilização é simples e pode ser utilizado em diversas linguagens.

No seu arquivo de template, utilize o plugin com a seguinte sintaxe:

{singular_plural singular=”%d child” plural=”%d children” number=2}

No exemplo acima, o resultado será: 2 children. Outros exemplos:

{singular_plural singular=”%d casa” plural=”%d casas” number=1}

{singular_plural singular=”%d computador” plural=”%d computadores” number=5}

Em ambos exemplos, teremos os seguintes resultados: 1 casa; 5 computadores.

Baixe o plugin e coloque-o na pasta onde os plugin do Smarty são armazenados. Provavelmente este será o caminho da pasta: smarty/libs/plugins/

Toda sugestão será bem-vinda. Um abraço.

Disponível a versão 0.1.1 da classe PHP W3_Image

October 19th, 2007. Published under classe, php, w3_image. No Comments.

Hoje, ao escrever um post sobre como utilizar a classe PHP W3_Image encontrei um bug no método filter da referida classe.

Caso fosse utilizado o método filter sem utilizar o método set_image_name encadeado a ele, gerava um erro, uma vez que o método filter não tinha um nome para aplicar a imagem que recebeu o filtro. Mas isso foi corrigido, e agora você pode utilizar o método filter em conjunto ou não ao método set_image_name.

Baixe a versão 0.1.1 da classe PHP W3_Image.

Como utilizar a classe W3_Image

October 19th, 2007. Published under classe, image, php, w3_image. 5 Comments.

Em um artigo anterior apresentei a vocês a classe PHP W3_Image. Neste post, iremos conhecê-la com mais detalhes, descobrindo todo seu potencial. Vamos lá.

Em todos os métodos da W3_Image é preciso informar a imagem que será utilizada. Afinal, ela precisa saber com quem vai lidar. Porém, podemos simplificar este processo, evitando a necessidade de se informar a imagem toda vez que um método for utilizado.

Há duas formas de fazermos isto: através do construtor da classe ou do método set_image. Vejamos:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image('fotos/planeta.jpg');
$objImg->set_image('http://static.php.net/www.php.net/images/php.gif');
?>

No exemplo acima, instanciamos a classe W3_Image e em seguida utilizamos o método set_image. Em ambos os casos, estamos informando uma imagem, e distintas uma da outra. Porém a imagem informada através do método set_image irá sobrepor a imagem informada pelo construtor da classe. Note que em ambos os casos, posso informar à classe a imagem que será utilizada.

Veremos agora como obter informações básicas de uma determinada imagem.

Como obter o mime-type de uma imagem

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image('fotos/planeta.jpg');
$objImg->set_image('http://static.php.net/www.php.net/images/php.gif');
echo $objImg->get_mime_type(); // Irá exibir image/gif
?>

Podemos simplificar; assim:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image;
echo $objImg->get_mime_type('http://static.php.net/www.php.net/images/php.gif'); // Irá exibir image/gif
?>

Como obter a extensão de uma imagem

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image('http://static.php.net/www.php.net/images/php.gif');
echo $objImg->get_extension(); // Irá exibir gif
?>

Embora seja necessário informar uma imagem, este processo é muito flexível, fique atento a esse detalhe nos exemplos de uso demonstrados.

Como obter a largura e altura de uma imagem

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image('http://static.php.net/www.php.net/images/php.gif');
$arrSizes = $objImg->get_sizes(); // Irá retornar um Array
print_r($arrSizes); // Irá imprimir Array ( [0] => 120 [1] => 67 [width] => 120 [height] => 67 )
?>

O método get_sizes da W3_Image retorna um Array super flexivo com a largura e altura da imagem. Tal Array pode ser acessado através dos índices 0 e 1 que retornam a largura e altura, respectivamente. Ou através de associações: width e height. Falei flexível?

Como obter somente a largura ou altura de uma imagem

Enquanto o método get_sizes retorna um Array com a largura e altura, o método get_sizex retorna a largura e o get_sizey retorna a altura. Intuitivo?

Exemplo de uso:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image('http://static.php.net/www.php.net/images/php.gif');
echo $objImg->get_sizex(); // Irá exibir 120
echo $objImg->get_sizey(); // Irá exibir 67
?>

Como obter a largura e altura de uma imagem formatados para serem utilizados em uma tag IMG do HTML

É simples, veja só:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image('http://static.php.net/www.php.net/images/php.gif');
echo $objImg->get_attr(); // Irá exibir width="120" height="67"
?>

Como exibir uma imagem no browser

Através do método show da W3_Image é possível exibir uma imagem no navegador com seu mime-type correto. Este método ainda finaliza a execução do script. Veja um exemplo de uso:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image('http://static.php.net/www.php.net/images/php.gif');
$objImg->show(); // Irá exibir a imagem; logo do PHP
?>

Como forçar o download de uma imagem

Muitas pessoas tem dúvidas de como exibir a janela do navegador para que seja possível fazer o download de uma imagem. Utilizando a W3_Image é super simples. Observe:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image('http://static.php.net/www.php.net/images/php.gif');
$objImg->download(); // Irá forçar o download da imagem; logo do PHP
?>

Como salvar uma imagem ou como fazer upload de uma imagem

Fazer upload de uma imagem ou salvá-la é muito, mas muito simples. Através do método save da W3_Image você pode salvar a imagem onde e como desejar. Observe:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image;
$imgTmp = $_FILES['image']['tmp_name'];
$objImg->save($imgTmp); // Irá salvar a imagem no diretório atual.
$objImg->save($imgTmp,’fotos/mamae.jpg’); // Irá salvar a imagem no diretório fotos como o nome mame.jpg
?>

Eu disse que é simples?

Como excluir uma imagem

Para excluir, deletar, remover uma imagem de um diretório, use o método delete. E pronto.

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image;
$objImg->delete('fotos-familia/sogra.jpg'); // Irá excluir a imagem da sogra. Coitada?
?>

Como criar uma imagem

É possível criar uma imagem a partir de uma outra já existente. Para isso, utilizamos o método create da W3_Image.

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image;
$imgTmp = $_FILES['image']['tmp_name'];
$objImg->create($imgTmp,400,300,’upload/foto.jpg’,85); // Irá criar uma imagem…
?>

No exemplo acima, fizemos o seguinte: informarmos ao método create que iremos utilizar a imagem armazenada na variável $imgTmp para criarmos uma nova a partir dela; sendo que a imagem a ser criada terá no máximo 400 pixels de largura, 300 de altura, será salva no diretório upload, como o nome foto.jpg e terá 85% de qualidade aplicada sobre ela. Se esse último parâmetro não for informado, o valor padrão 75% é levado em consideração.

Como rotacionar uma imagem

Informe a imagem e a quantidade de graus a girá-la, que o método rotate da W3_Image faz o restante. Veja:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image;
$objImg->rotate('fotos-familia/sogra.jpg',180); // Irá girar a foto da sogra a 180 graus.
?>

Como aplicar filtros, efeitos em uma imagem

Através do método filter da W3_Image, podemos aplicar diversos tipos de efeitos em uma imagem, como por exemplo: negativo, tons de cinza, detectar bordas dentro da imagem, “emboss”, “gaussianblur”, “selectiveblur”, brilho, contraste, tons de sépia, entre outros.

Alguns efeitos não necessitam de informações adicionais para serem aplicados, apenas diga qual efeito e pronto. Outros precisam de informações para saberem como irão trabalhar. Vejamos alguns exemplos:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image;
$objImg->filter('foto.jpg','negate'); // Aplicar um filtro negativo
$objImg->filter('foto.jpg','grayscale'); // Aplicar um filtro de tons de cinza
$objImg->filter('foto.jpg','sepia'); // Aplicar um filtro de tom de sepia
$objImg->filter('foto.jpg','brightness',30); // Aplicar 30 de brilho sobre a imagem
?>

Observe os demais tipos de filtros na documentação da W3_Image.

Como utilizar e qual a vantagem do método set_image_name da W3_Image

O método set_image_name da W3_Image é muito útil ao se trabalhar com os métodos rotate e filter, uma vez que ao utilizá-lo a imagem original é mantida e uma nova é criada com o efeito aplicado. Exemplo:

<?php
require_once 'class/W3_Image.class.php';
$objImg = new W3_Image;
$objImg->set_image_name('foto-negativa.jpg')->filter('foto.jpg','negate'); // Exemplo de uso do método set_image_name
?>

Ao utilizar o método set_image_name observe que utilizamos um encademanto de métodos, ou chaining (recurso conhecido entre aqueles quem utilizam a jQuery).

Ufa, finalizamos vários exemplos de uso de como utilizar a classe PHP W3_Image. Faça testes, envie-me seu feedback, consulte a documentação e até breve.

Um abraço.

W3_Image PHP class

October 18th, 2007. Published under class, image, php, w3_image. 2 Comments.

W3_Image é uma classe em PHP que utilizo para realizar diversas operações com imagens via PHP. A partir de hoje, ela será pública, e poderemos discutir a respeito de suas funcionalidades.

Embora ela esteja imatura, em sua versão 0.1, julgo um momento adequado para apresentá-la. Uma vez que quanto mais pessoas a utilizam, novas possibilidades de uso surgem, bugs são encontrados, recursos são questionados e com isso ela vai amadurecer e definir sua personalidade.

O principal objetivo é que ela seja simples, com uma linha de aprendizagem super baixa e que seus métodos sejam intuitivos. Quando eu programo, gosto de conversar com os códigos, por isso julgo que todos scripts, classes e afins devem ser intuitivos, para que o nosso bate-papo não seja unilateral.

Por exemplo, com os métodos da W3_Image o que se deve ter em mente ao utilizar seus métodos é o seguinte: o quê (neste contexto, qual recurso a ser aplicado); quem/qual (neste contexto, qual imagem); como (neste contexto, quais os parâmetros).
Como disse que ela ainda está imatura, não significa que ela não dispõe de recursos interessantes. Com a W3_Image é possível:

  • Obter o mime-type de uma imagem;
  • Obter a extensão de uma imagem;
  • Obter suas dimensões, ou uma dimensão específica: largura ou altura;
  • Exibir uma imagem;
  • Força o download de uma imagem;
  • Salvar uma imagem;
  • Renomear uma imagem;
  • Excluir uma imagem;
  • Criar imagem;
  • Rotacionar uma imagem;
  • Aplicar filtros numa imagem;

Em versões futuras virão novos recursos, como: marca d’água, corte, desenhos, legendas, “flip”, redimensionar, log de erros, entre outros.

Faça o download da versão 0.1 da W3_Image, consulte sua documentação e aguarde por novos posts abordando seus métodos.

40 dicas para otimizar códigos PHP

October 16th, 2007. Published under php. No Comments.

Em minha leitura matinal de feeds, me deparei com um post que aborda 40 dicas de como otimizar códigos PHP. Super interessante. Leia:40 Tips for optimizing your php Code

É ímpar ou par? Confira facilmente usando o PHP

June 1st, 2007. Published under php. 2 Comments.

Utilizando o seguinte código:

$status = (1 & $number) ? 'Ímpar' : 'Par';

Verificamos se o número informado é ímpar ou par, simples ou não?

Leia o original Odd and Even Numbers

Função para criar breadCrumbs

April 9th, 2007. Published under php. No Comments.

Desenvolvi uma função que facilita a criação de breadCrumbs. Veja como utilizá-la:

echo build_bread_crumbs(array('Home','Produtos','Produtos da categoria XXX'),array('/','/produtos/',''));

Observe que o último item do array no segundo parâmetro foi passo como vazio, com isso, o último item da lista do breadCrumbs não terá um link.

O código da função:

/**
 * Função para criar breadCrumbs
 * @autor Leandro Vieira Pinho [http://leandro.w3invent.com.br]
 * @version 1.0
 * @created sábado, 8 de abril de 2007
 * @param $arrTetxt array informe os textos dos links
 * @param $arrLinks array informe o link para os textos
 * @param $strMessageBreadCrumb string mensagem inicial do breadCrumb
 */
function build_bread_crumbs($arrText = array(), $arrLinks = array(), $strMessageBreadCrumb = ‘Você está aqui:’) {
	$strHtml  = ”;
	$strHtml .= “<div id=\”bread-crumbs\”>\n”;
	$strHtml .= “\t<ul>\n”;
	$strHtml .= “\t\t<li><strong>$strMessageBreadCrumb</strong></li>\n”;
	$i = 0;
	foreach ( $arrText as $text ) {
	if ( $arrLinks[$i] != ” ) {
	$strHtml .= “\t\t<li><a href=\”$arrLinks[$i]\”>$text</a></li>\n”;
	} else {
	$strHtml .= “\t\t<li>» $text</li>\n”;
	}
	$i++;
	}
	$strHtml .= “\t</ul>\n”;
	$strHtml .= “</div><!– / bread-crumbs –>”;
	return $strHtml;
}

Talvez seja útil para mais alguém.

Atenção: atente-se aos “n” e “t” que na verdade são “\n” e “\t”;

Otimização de códigos PHP: Links

February 4th, 2007. Published under otimização, php. No Comments.

Segue abaixo alguns links de artigos que falam a respeito da otimização de códigos PHP.