Ir ao conteúdo
  • Cadastre-se

Comparar dois arquivos com nomes iguais e tipos diferentes


Posts recomendados

Como eu faço para comparar dois arquivos com nomes iguais e extensões diferentes??

 

Tenho uma pasta chamada jogos: 

 

Dentro dela tem: 

 

jogo_moto. Jpg

jogo_moto. swf

 

jogo_carro. JPG

jogo_carro. swf

 

jogo_tiro.jpg

jogo_tiro.swf

 

Minha intenção é fazer um script em php que liste os arquivos em JPG e dentro dessas imagens o link com seu respectivo jogo. 

<?php

/* Diretorio que deve ser lido */
$dir = "jogos/";

/* Abre o diretório */
$pasta= opendir($dir);

/* Loop para ler os arquivos do diretorio */
while ($arquivo = readdir($pasta)){

	/* Verificacao para exibir apenas os arquivos e nao os caminhos para diretorios superiores */
	if ($arquivo != '.' && $arquivo != ".."){


			// verificando se o arquivo é .jpg
			if (substr($arquivo,-4) == ".jpg") { 
				echo'<table width="200" border="1">';
				echo'	  <tr>';
				echo'		<th scope="row">';
							
							
							
							
							
							
						echo'</th>';
					 echo' </tr>';
					echo'</table>';
			}
			
	}

}

?>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Elcio2016 Você não precisa comparar.

 

Basta montar seu link com a imagem dentro de um laço de for, while ou foreach. No seu caso,  seria melhor você usar um banco de dados e foreach que o processo fica muito mais fácil.

 

Mas se ainda sim você quer fazer desse jeito trabalhoso...  o lance é criar um vetor(array) associativo com a imagem e o arquivo de jogo.  Depois  dentro de um laço de repetição foreach você itera e varre o vetor.

<?php 
     $thumbs = glob("img/thumb/*.jpg", GLOB_BRACE);
  
    if(count($thumbs)) :
      natcasesort($thumbs);
      foreach($thumbs as $thumb) :
      echo"   
          <li class='item'>
              <a href='URK'>
                  <img src=' $thumb' width='100%' alt='' />
              </a>
          </li> ";


        endforeach;
   else:
          echo "Sem imagens para mostrar";
    endif;
    ?>

Obviamente este é só um mero exemplo e pode nem funcionar... então nada de copiar e colar.  Estude o código e implemente no seu.

 

 

 

Link para o comentário
Compartilhar em outros sites

acredito que consegui entender bem cada trecho do código. 

 

a função count() conta o total de imagens jpg na pasta. O natcasesort coloca em ordem alfabetica as imagens e o foreach é um loop somente para arrays. ok!

 

Ficou do jeito que eu queria o código abaixo. porém e como colocar o link do jogo, pois cada jogo tem o nome igual para cada imagem.

 

Fiquei confuso

 

Olha só:

<?php 
     $thumbs = glob("jogos/*.jpg", GLOB_BRACE);
  
    if(count($thumbs)) :
      natcasesort($thumbs);
      foreach($thumbs as $jogos) :
      echo"   
          
              <a href='URK'>
                  <img src=' $jogos' width='100px' alt='' />
              </a>
          ";


        endforeach;
   else:
          echo "Sem imagens para mostrar";
    endif;
    ?>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Elcio2016  Tem um jeito bem fácil de fazer com arrays, quando você não possui banco de dados. Particularmente, prefiro usar um banco de dados e armazenar na tabela o nome do jogo e a url do jogo.. assim bastava só fazer uma consulta SQL e preencher o laço while com os valores da tabela.

 

Como não possui, o jeito é com arrays.

Então, Você primeiro precisa criar um array de arquivos a partir da função glob().  No parâmetro dele apenas diga que quer pegar todos os arquivos desta maneira: 

$lista = glob("jogos/*.{*}", GLOB_BRACE);

Com todos os arquivos no array se você der um echo print_r($lista) com o <pre> </pre>   irá mostrar o vetor ordenado de forma natural:

array(
       0 => "jogos/jogo_moto.Jpg",
       1 => "jogos/jogo_moto.swf",
       2 => "jogos/jogo_carro.JPG",
       3 => "jogos/jogo_carro.swf",
       4 => "jogos/jogo_tiro.jpg", 
       5 => "jogos/jogo_tiro.swf"
     );

Perceba que eles estão em ordem. Com isso você pode gerar um novo array separando de dois em dois. 

Por que de dois em dois? porque os nomes dos arquivos são iguais mas com extensões diferentes.

A ideia é gerar um array multi-dimensional mantendo seus índices, ou seja um array associativo multi-dimensional

 

O que é um array multi-dimencional? é um vetor que possui um outro vetor para cada elemento. E como é este formato?

Usando seu próprio array como exemplo ficaria da seguinte maneira:

 

array(
      0 => array(
                  0 => "jogos/jogo_moto.Jpg",
                  1 => "jogos/jogo_moto.swf"
                ),
      1 => array(
                  0=> "jogos/jogo_carro.JPG",
                  1 => "jogos/jogo_carro.swf
               "), 
      2 => array(
                  0=> "jogos/jogo_tiro.jpg",  
                  1=> "jogos/jogo_tiro.swf"
                )
     );

Veja que o índice zero possui um vetor com mais duas posições que começam a partir do zero.

Com isso fica fácil de definir quem é o jogo e quem é a imagem.

 

Tá e agora? como eu chego nesse array multi-dimensional que parece complicado?

Com apenas uma função! isso mesmo. uma simples função e dois parâmetros!

 

A função chamada de array_chunk().  Esta função recebe o primeiro parâmetro um array e o segundo a quantidade de divisão. ou seja, quantos elementos você quer por no segundo vetor criado. Como queremos dois elementos que é o jogo e a imagem dele.. a função é chamada assim:

 

$separa = array_chunk($lista, 2);

Com isso armazenamos na variável $separa o nosso array dividido de dois em dois.

Sabendo que o índice zero é a URL da imagem e o índice 1 é a URL do jogo basta usar um foreach para iterar o vetor e mostrar em tela com o echo  na estrutura desejada.

 

então o código completo fica desta forma:

$lista = glob("jogos/*.{*}", GLOB_BRACE);
$separa = array_chunk($lista, 2);			
foreach($separa as $jogos):
    $img = $jogos[0];
    $url = $jogos[1];
    echo "<a href='$url'><img src='$img' class='game' /></a>";
endforeach;

Em 7 linhas você resolve o problema!

 

Lembrando que é necessário que todos os arquivos jpeg e swf precisa estar na mesma pasta.

PS: o class="game" eu coloquei só para mostrar que podes usar um CSS para deixar as imagens lado a lado sem a necessidade de usar tabelas.   No CSS use  display: inline-block

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!