Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

202
Vistas
¿Cómo puedo organizar datos en una cadena usando PHP?

Tengo un texto largo en una cadena:

 $data = "899.3MB 976.4MB 874.7MB 985.6MB 1.2GB 691.3MB 1.4GB 975.4MB 1.0GB 712.8MB 879.8MB 908.6MB 912.1MB 887.5MB 950.4MB 1.4GB 749.9MB 851.2MB 750.8MB 813.7MB 1.2GB 700MB 998.5MB 1010.8MB 989.7MB 1.1GB 797.5MB 699.5MB 683.7MB 1.0GB 958.2MB 1.1GB 1.0GB 1.0GB 1.0GB 1.1GB 1.0GB 1.0GB 846MB 873MB 753MB 1.1GB 970MB 749.9MB 750MB 650MB 845MB 1.1GB 1.3GB 1.2GB 1.1GB 867MB 940MB 946MB 909MB 909MB 913MB 893MB 892MB 889MB 730MB 848MB 855MB 1.15GB 853MB 765MB 1.2GB 863MB 838MB 753MB 960MB 868MB 967MB 1.06GB 751MB 1GB 1.2GB 920MB 1.2GB 897MB 1009.15MB 764MB 694MB 967MB 989.9MB 898MB 938MB 879.76MB 879.76MB 999.78MB 1.3GB 1.1GB 1.09GB"

¿Cómo puedo organizarlos en diferentes variables después de ordenarlos? Al igual que $mb contendrá solo los valores que terminen en MB y $gb contendrá solo los valores que terminen en GB. Y tampoco quiero MB y GB en la salida, solo quiero los valores float o int para poder agregarlos.

Estoy importando estos datos de la base de datos MySql en la que hay una columna llamada file_size

 while ($data = mysqli_fetch_array($records)) { $file_size_ext = str_replace(' ', '',$data['file_size'])." "; } mysqli_close($db); ?>

Traté de organizarlos por separado mediante echo substr("$file_size_ext",-2) =='GB' pero no hay nada como esto en PHP 😅.

Solo quiero separarlos en MB y GB para poder agregar u obtener la suma de la matriz "por separado".

Probablemente debería modificar mi base de datos y escribir todos los tamaños de archivo en la misma unidad, entonces será mucho más fácil.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Podrías usar algo como lo siguiente:

 $data = "899.3MB 976.4MB 874.7MB 985.6MB 1.2GB 691.3MB 1.4GB 975.4MB 1.0GB 712.8MB 879.8MB 908.6MB 912.1MB 887.5MB 950.4MB 1.4GB 749.9MB 851.2MB 750.8MB 813.7MB 1.2GB 700MB 998.5MB 1010.8MB 989.7MB 1.1GB 797.5MB 699.5MB 683.7MB 1.0GB 958.2MB 1.1GB 1.0GB 1.0GB 1.0GB 1.1GB 1.0GB 1.0GB 846MB 873MB 753MB 1.1GB 970MB 749.9MB 750MB 650MB 845MB 1.1GB 1.3GB 1.2GB 1.1GB 867MB 940MB 946MB 909MB 909MB 913MB 893MB 892MB 889MB 730MB 848MB 855MB 1.15GB 853MB 765MB 1.2GB 863MB 838MB 753MB 960MB 868MB 967MB 1.06GB 751MB 1GB 1.2GB 920MB 1.2GB 897MB 1009.15MB 764MB 694MB 967MB 989.9MB 898MB 938MB 879.76MB 879.76MB 999.78MB 1.3GB 1.1GB 1.09GB"; $res = preg_split('/\s+/', $data); $gb = []; $mb = []; foreach($res as $r) { if(strpos($r, 'MB') !== false) { $to_add = str_replace('MB', '', $r); $mb[] = (float) $to_add; } else if(strpos($r, 'GB') !== false) { $to_add = str_replace('GB', '', $r); $gb[] = (float) $to_add; } } var_dump(array_sum($gb)); var_dump(array_sum($mb));
over 4 years ago · Santiago Trujillo Denunciar

0

regex es una solución corta

\d+ -> coincide con dígitos

. -> coincide con el punto

(.\d+)? -> dice que el patrón podría tener .1 .2 o no

 <?php $data = "899.3MB 976.4MB 874.7MB 985.6MB 1.2GB 691.3MB 1.4GB 975.4MB 1.0GB 712.8MB 879.8MB 908.6MB 912.1MB 887.5MB 950.4MB 1.4GB 749.9MB 851.2MB 750.8MB 813.7MB 1.2GB 700MB 998.5MB 1010.8MB 989.7MB 1.1GB 797.5MB 699.5MB 683.7MB 1.0GB 958.2MB 1.1GB 1.0GB 1.0GB 1.0GB 1.1GB 1.0GB 1.0GB 846MB 873MB 753MB 1.1GB 970MB 749.9MB 750MB 650MB 845MB 1.1GB 1.3GB 1.2GB 1.1GB 867MB 940MB 946MB 909MB 909MB 913MB 893MB 892MB 889MB 730MB 848MB 855MB 1.15GB 853MB 765MB 1.2GB 863MB 838MB 753MB 960MB 868MB 967MB 1.06GB 751MB 1GB 1.2GB 920MB 1.2GB 897MB 1009.15MB 764MB 694MB 967MB 989.9MB 898MB 938MB 879.76MB 879.76MB 999.78MB 1.3GB 1.1GB 1.09GB"; preg_match_all('~\d+(\.\d+)?(?=MB)~', $data, $mb); preg_match_all('~\d+(\.\d+)?(?=GB)~', $data, $gb); $mb = $mb[0] ?? []; $gb = $gb[0] ?? [];
over 4 years ago · Santiago Trujillo Denunciar

0

Primero querrá dividir esa cadena en entradas individuales. Lo haces con explode() .

 $entries = explode(" ", $data);

Luego querrá crear sus matrices para sus diferentes unidades de almacenamiento e iterar a través de la matriz $entries:

 $mb = []; $gb = []; foreach($entries as $val) { }

Luego, en el ciclo for, puede buscar las unidades con stripos() . También puede eliminar la unidad aquí con str_ireplace() .

 if(stripos($val, "mb") !== false) $mb[] = str_ireplace("mb", "", $val); else if(stripos($val, "gb" !== false) $gb[] = str_ireplace("gb", "", $val);

Y ponlo todo junto:

 $entries = explode(" ", $data); $mb = []; $gb = []; foreach($entries as $val) { if(stripos($val, "mb") !== false) $mb[] = str_ireplace("mb", "", $val); else if(stripos($val, "gb" !== false) $gb[] = str_ireplace("gb", "", $val); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda