PHP - Ayuda con un Script...!!!!

 
Vista:
sin imagen de perfil
Val: 4
Ha aumentado su posición en 21 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con un Script...!!!!

Publicado por ROSI (42 intervenciones) el 01/09/2016 19:15:53
Hola.!

Tengo un problema y ya le di muchas vueltas pero no puedo :( Quisiera ver si alguien me puede apoyar a ver en que estoy mal o cual es mi error para tratar de solucionar.!

Les explico un poco.!

1.- tengo una carpeta llamada (art).!
2.- dentro de ella tengo archivos xls y carpetas las cuales tengo que leer solo los xls.!
3.- ya hago el recorrido de las carpetas el problema es que por cada carpeta me genera un arreglo.! lo cual yo necesito un arregle donde contenga todo, osea un solo arreglo con todos los xls.!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
    header('Content-Type: charset=utf-8');
    require_once '../phpExcelReader/Excel/reader.php';
 
    function showFiles($path) {
        $extensions = array('xls');
        $directory = new DirectoryIterator($path);
 
        foreach ($directory as $fileinfo) {
            if($fileinfo != '..' && $fileinfo !='.' && $fileinfo !='') {
                if ($fileinfo->isFile()) {
                    $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION));
                    if (in_array($extension, $extensions)) {
                        $result[] = $fileinfo->getFilename();
                    }
                }else{
                    showFiles($path."/".$fileinfo);
                }
            }
        }
        print_r($result);
  }
    showFiles("../art");
?>


A si es como me muestra mi resultado.! ya que dentro de la carpeta (art) contiene :

Carpeta llamada (Prueba) -> dentro de la carpeta esta el archivo xls -> Prueba_A.xls
archivo xls. A
archivo xls. B
archivo xls. C


--- Resultado ----
1
2
3
4
5
6
7
8
9
10
Array
(
    [0] => Prueba_A.xls
)
Array
(
    [0] => A.xls
    [1] => B.xls
    [2] => C.xls
)

---- Adonde quiero llegar -----

1
2
3
4
5
6
7
Array
(
    [0] => Prueba_A.xls
    [1] => A.xls
    [2] => B.xls
    [3] => C.xls
)



ayuda por favor.!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con un Script...!!!!

Publicado por kip (877 intervenciones) el 01/09/2016 20:45:04
Hola, lo que pasa es que estas haciendo print_r() dentro de la funcion y al volver a llamar a esta dentro de si misma te imprime 2 arrays, uno por la subcarpeta y otro por los archivos que no estan en ninguna subcarpeta.

Debes hacer un return para que cuando llames a la funcion showfiles(), esta te retorne el array que corresponde, pero esto no te funcionara tambien, te regresara solo el ultimo array que crea, ya que en la linea donde llamas de nuevo a la funcion dentro de esta misma, no haces nada mas que solo llamarla, no almacenas.

Aqui hice algo a ver si te sirve, o quizas te ayude a guiarte a dar con la solucion:

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
27
28
29
30
31
32
33
34
35
<?php
header('Content-Type: charset=utf-8');
require_once '../phpExcelReader/Excel/reader.php';
 
function showFiles($path) {
	$extensions = array('xls');
	$directory = new DirectoryIterator($path);
 
	foreach ($directory as $fileinfo) {
		if($fileinfo != '..' && $fileinfo !='.' && $fileinfo !='') {
			if ($fileinfo->isFile()) {
				$extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION));
				if (in_array($extension, $extensions)) {
					$result[] = $fileinfo->getFilename();
				}
			}else{
				$result[] = showFiles($path."/".$fileinfo);
			}
		}
	}
	foreach ($result as  $value) {
		if (is_array($value)){
			foreach ($value as $value2) {
				$return[] = $value2;
			}
		} else {
			$return[] = $value;
		}
	}
	return $return;
}
 
print_r(showFiles("../art"));
 
?>

Nos cuentas si te funciona.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 4
Ha aumentado su posición en 21 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con un Script...!!!!

Publicado por ROSI (42 intervenciones) el 02/09/2016 00:30:54
Hola Kip.!

Al realizar las pruebas que me comentas, si me muestra el resultado al que quería llegar, pero al querer juntar todo mi script me marca un error ya que solo me leer el primer array que lee.!

En el primer código se encuentra lo siguiente.!

<?php
header('Content-Type: charset=utf-8');
require_once '../phpExcelReader/Excel/reader.php';

function showFiles($path) {
$extensions = array('xls');
$directory = new DirectoryIterator($path);

foreach ($directory as $fileinfo) {
if($fileinfo != '..' && $fileinfo !='.' && $fileinfo !='') {
if ($fileinfo->isFile()) {
$extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION));
if (in_array($extension, $extensions)) {
$result[] = $fileinfo->getFilename();
}
}else{
showFiles($path."/".$fileinfo);
}
}
}
print_r($result);
}
showFiles("../art");
?>

Al cual, a mi variable " $result "

trae el array, esa variable la paso a mi siguiente codigo, que me forma un json

for ($valor=0; $valor<=count($result); $valor++) {
$data = new Spreadsheet_Excel_Reader();
$data->read('../art/'.$result[$valor]);

error_reporting(E_ALL ^ E_NOTICE);

echo "{\n";

for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) {
//echo $i;
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
if ($i == 2) {
if($j<=3)
echo '"'.$data->sheets[0]['cells'][$i][$j].'"'.':';
if ($data->sheets[0]['cells'][$i][$j] == 'Dato') {
echo '"'.$data->sheets[0]['cells'][3][1].'"'.','."\n";
}
elseif ($data->sheets[0]['cells'][$i][$j] == 'Dato'') {
echo '"'.$data->sheets[0]['cells'][3][2].'"'.','."\n";
}
elseif ($data->sheets[0]['cells'][$i][$j] == 'Dato') {
echo '"'.$data->sheets[0]['cells'][3][3].'"'.','."\n";
}
}
elseif ($i == 7) {
//echo $data->sheets[0]['cells'][$i][$j]."--".utf8_decode("Año")."\n";
$str = $data->sheets[0]['cells'][$i][$j];

$findme = utf8_decode('Fecha');
$find = utf8_decode('Año');


$resultado = strpos($str, $findme);
$resultadofind = strpos($str, $find);

if($resultado !== FALSE || $resultadofind !== FALSE ){
echo '"'.$data->sheets[0]['cells'][$i][$j].'"'.':'.'"Date"'.','."\n";
} else {
echo '"'.$data->sheets[0]['cells'][$i][$j].'"'.':'.'"String"'.','."\n";
}
}
}
}

echo "}"; }

como le puedo hacer para que solo lea mi variable mi segundo codigo.!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar