Newsgroup: it.comp.www.php
Titolo: "rinominare" array

Salve. Ho fatto uno script per estrarre i tag dai file ogg e per
inserirli in un db.
Per qualche arcano motivo, il campo "titolo", nella chiave dell'array
(che è del tipo $info['title'], nei vari file non ha sempre lo stesso
nome. A volte (l'ho scoperto con un print_f dell'array) è $info[title],
a volte $info[TITLE], oppure $info[',TITLE'].
Poichè poi devo fare una query di inserimento nel database, avrei
bisogno di uniformare gli array.
C'è un modo per dirgli una cosa tipo (rubo la sintassi da SQL):
$info['%TITLE%'] = $nomevariabile
o qualche altro.
E' necessario uniformare... A volte cambia da maiuscolo a minuscolo, a
volte prima o dopo "title" ci sono altri caratteri.
Dovrei "isolare" il nome "title" o "TITLE".
Sergej
-- 
http://www.ildeposito.org
Canti di protesta politica e sociale
Archivio di testi e accordi

 Sergej
preferirei trovare il modo di riconoscere tale indice in modo diverso..
anche perche' se un'altro indice contiene la parola title oltre il campo
title potresti avere un problema..
ma comunque..
<?php
$array = array(
  'index0' => 'test',
  'index1' => 'test',
  ', titLE.' => 'title',
  'index3' => 'test'
);
while (list($key) = each($array)) {
  if (preg_match('/.*title.*/i', $key, $matches)) {
    $title = $array[$matches[0]];
    unset($array[$key]);
    $array['title'] = $title;
    break;
  }
}
print_r($array);
-- 
www.iuz-lab.info

 }
Ho provato ad utilizzare questo codice, però succede una cosa strana.
Supponendo che di avere 5 canzoni, il cui titolo è titolo1, titolo2,
etc, quando va a recuperarsi i tag relativi al titolo succede che il
primo che trova è:
titolo1
poi però il secondo è:
titolo1titolo2
e così via.
Ogni tanto si "riazzera" e ricomincia.
Insomma, sembra che si "ricordi" l'array precedente...
Che può essere?


 Sergej
puoi postare il codice interessato..
-- 
www.iuz-lab.info

 puoi postare il codice interessato..
Ok, ecco il primo script:
<?
function getFiles($directory) {
   include ("connessione_db.php.inc");
   if($dir = opendir($directory)) {
       // Create an array for all files found
       $tmp = Array();
       // Add the files
       while($file = readdir($dir)) {
           // Make sure the file exists
           if($file != "." && $file != ".." && $file[0] != '.') {
               // If it's a directiry, list all files within it
               //echo ("$file");
               if(is_dir($directory . "/" . $file)) {
                   $tmp2 = getFiles($directory . "/" . $file);
                   if(is_array($tmp2)) {
                       $tmp = array_merge($tmp, $tmp2);
                   }
               } else {
                   array_push($tmp, $directory . "/" . $file);
                   $f = $file;
                   $e = str_replace("./brani/", "", $directory);
                   //echo ("$e - $f<br>");
                   include ("estrai_dati.php");
$autore = addslashes(htmlentities($info['artist'], ENT_QUOTES));
if ($info['date'] != "") { $anno_ver = $info['date'];}
	else {  $anno_ver = "";}
                   while (list($key) = each($info)) {
 			if (preg_match('/.*title.*/i', $key, $matches))                  			{
  			 $title = $info[$matches[0]];
                         unset($info[$key]);
			 $info['title'] = $title;
    			 break;
    			 }
		   }
$dimensione = $grandezza_mega;
$cartella = $e;
$album = $e;
$nomefile = $f;
$controlla_file = mysql_query("SELECT * FROM mp38 where nomefile = '$f'
AND cartella = '$e';");
if (mysql_num_rows($controlla_file) < 1 AND $e != '.' AND $f != '..' ) {
                   $add = mysql_query("INSERT INTO mp38 VALUES ('' ,
'$info[title]' , '$autore' , '' , '$anno_or' , '$anno_ver' , 'no' ,
'$nomefile' , '$cartella' , '$album', '$dimensione' , '' , 'no' ,
'$note');");
                  // stampa gli eventuali errori
                   //echo mysql_errno() . ": " . mysql_error(). "\n";
                   //echo ("<div style=\"font-size:10px; font-family:
Verdana;\">$title<div>");
                   unset($info['title']);
            }
               }			
           }
       }
       // Finish off the function
       closedir($dir);
       return $tmp;
   }
mysql_close ($connect_db);
}
// Example of use
getFiles('./brani'); // This will find all files in the current
directory and all subdirectories
?>
Adesso il file estrai_dati.php, che viene eseguito per ogni file trovato:
<?
$filename="./brani/$e/$f";
    $fp = fopen( $filename, 'r');
    $info = array();
    $info['size'] = filesize( $filename );
    $info['name'] = basename( $filename );
    $info['path'] = dirname( $filename );
$done = false;
    while( $done == false ) {
        $working = fread( $fp, 1 );
        if( $working == "l" ) {
            $working .= fread( $fp, 8 );
            //print $working.'<br>';
            if( $working == "libVorbis" ) {
                $done = true;
                //echo ("sergio");
                }
        }
    }
   while( ord( $working ) > 31 ) {
        $working = fread( $fp, 1 );
    }
    $tag = "";
    while( $tag != "done" ) {
        $working = "";
        while( ( $working != "=" ) && ( $tag != "done" ) ) {
            if( ord( $working ) > 31 ) {
                $tag .= $working;
            }
            $working = fread( $fp, 1 );
            if( $tag == "v" ) {
                $tag .= "o".fread( $fp, 9 );
            if( ( substr_count( $tag, "vorbis" ) == 1 ) && (
substr_count( $tag, "BCV" ) == 1 ) ) {
                    $tag = "done";
                } else {
                    fseek( $fp, ( ftell( $fp ) - 10 ) );
                }
            }
        }
        if( $tag != "done" ) {
            $working = fread( $fp, 1 );
            while( ord( $working ) > 31 ) {
                $title .= $working;
                $working = fread( $fp, 1 );
            }
            $info[$tag] = $title;
            $tag = "";
            $title = "";
        }
    }
    fclose( $fp );
    // calcolo la grandezza del file in megabyte
    $grandezza_byte = $info['size'] / 1048576;
    $grandezza_mega = round($grandezza_byte, 2);
    //print_r($info);
    return $info;
?>
Lo script fa le seguenti operazioni: va a cercare in una directory, e
nelle sottocartelle, tutti i file, estrae i dati (con lo script
estrai_dati.php) e poi inserisce questi dati nel db.
Se io, alla fine del processo, stampo la variabile $info[title] (che è
"trattata" tramite il codice che hai mandato tu, per i motivi che ho già
scritto, ottengo un output di questo tipo (i file "analizzati" sono molti):
Stucky
StuckyL'internazionale di fortini
StuckyL'internazionale di fortiniKarlett
StuckyL'internazionale di fortiniKarlettSebastiano
Orsù compagni di Civitavecchia!
Orsù compagni di Civitavecchia!Il vestito di rossini
Orsù compagni di Civitavecchia!Il vestito di rossiniAnni settanta nati
dal fracasso
Orsù compagni di Civitavecchia!Il vestito di rossiniAnni settanta nati
dal fracassoPrimo d'agosto mestre sessantotto
Orsù compagni di Civitavecchia!Il vestito di rossiniAnni settanta nati
dal fracassoPrimo d'agosto mestre sessantottoAvola due dicembre 1968
Orsù compagni di Civitavecchia!Il vestito di rossiniAnni settanta nati
dal fracassoPrimo d'agosto mestre sessantottoAvola due dicembre
1968Ballata della fiat
Orsù compagni di Civitavecchia!Il vestito di rossiniAnni settanta nati
dal fracassoPrimo d'agosto mestre sessantottoAvola due dicembre
1968Ballata della fiatValle giulia
Orsù compagni di Civitavecchia!Il vestito di rossiniAnni settanta nati
dal fracassoPrimo d'agosto mestre sessantottoAvola due dicembre
1968Ballata della fiatValle giuliaO cara moglie
Orsù compagni di Civitavecchia!Il vestito di rossiniAnni settanta nati
dal fracassoPrimo d'agosto mestre sessantottoAvola due dicembre
1968Ballata della fiatValle giuliaO cara moglieLa caccia alle streghe
Orsù compagni di Civitavecchia!Il vestito di rossiniAnni settanta nati
dal fracassoPrimo d'agosto mestre sessantottoAvola due dicembre
1968Ballata della fiatValle giuliaO cara moglieLa caccia alle stregheIo
vi parlo di milano
[...]
E' così via. Poi ogni tanto interrompe la sequenza e ricomincia con un
titolo e di seguito ne accoda altri.
Per concludere: il codice che mi hai scritto effettivamente risolve il
problema di riconoscere le "variante" dell'indice $info[title], però è
come se si "ricordasse" i dati...
