Hola a todos,
Este es un problema que me ha parecido muy interesante, y con el permiso de ustedes, me gustaría compartir la solución que se me ha ocurrido inicialmente.
El método de Manoloweb es sumamente interesante, y me asombra su ingenio al haber recurrido a una sentencia eval() para encontrar la solución.
Alternativamente, pienso que la solución podría obtenerse también mediante el uso de expresiones regulares, y esta es la primera implementación que se me ha ocurrido:
Código:
<?php
// Funcion que recupera los conjuntos de cifras de una cadena y
// devuelve la suma de estos valores
function funcionquedeconozco ($cadena)
{
preg_match_all ('/\\b[\\d\\.]+\\b/', $cadena, $coincidencias);
$num_coincidencias = count ($coincidencias[0]);
for ($i = 0, $suma = 0; $i < $num_coincidencias; $i++)
$suma += $coincidencias[0][$i];
return $suma;
}
$alumnos1 = array (
'a' => "Los alumos A tienen Pesos",
'b' => "Los alumos B tienen [$20] Pesos",
'c' => "Los alumos C tienen [$30] Pesos",
'd' => "Los alumos D tienen [$40] Pesos",
'e' => "Los alumos E tienen [$50] Pesos",
'f' => "Los alumos F tienen [$60] Pesos");
$alumnos2 = array (
'a' => "Los alumos A tienen poquitos Cuadernos",
'b' => "Los alumos B tienen libros y Cuadernos",
'c' => "Los alumos C tienen medallas y Cuadernos",
'd' => "Los alumos D tienen algunos Cuadernos",
'e' => "Los alumos E tienen amigos y Cuadernos",
'f' => "Los alumos F detestan los Cuadernos");
$cadena1 = implode ('', $alumnos1);
$cadena2 = implode ('', $alumnos2);
$info1 = funcionquedeconozco ($cadena1);
$info2 = funcionquedeconozco ($cadena2);
echo "Ejemplo 1: $info1 Pesos\n";
echo "Ejemplo 2: $info2 Pesos\n";
?>
El algoritmo de la función es relativamente simple:
* Recuperar las coincidencias de una cadena dada con un patrón que representa conjuntos de cifras (0-9) o puntos (.) sucesivos. Los resultados se almacenan en la matriz $coincidencias.
* Inicializar un acumulador $suma en cero y recorrer la matriz $coincidencias, añadiendo el valor de cada elemento de la fila 0 al acumulador $suma. La fila cero de la matriz $coincidencias es en donde van a dar las secuencias de caracteres que coincidieron con la expresión regular completa.
* Devolver el valor de $suma.
Quizás sea útil al menos como material de referencia, ya que la solución de Manoloweb es estupenda.
Un cordial saludo