Hola,
No estoy seguro de haber entendido perfectamente el problema, aunque me parece bastante interesante, de modo que he intentado implementar una solución. Me parece que algo como esto podría serte útil (habiendo modificado un poco el código original que has escrito):
Código:
<?php
mysql_connect ('localhost', 'root', '');
$db = "BasedeDatos";
$result = mysql_list_tables ($db);
$i = 0;
while ($i < mysql_num_rows ($result)) {
$tabla_nombres[$i] = mysql_tablename ($result, $i);
$i++;
}
$cant_tablas = $i;
print "<h3>Tablas</h3>\n<ul>\n";
// Para llevar un registro de los campos que el programa recupera,
// usaremos un arreglo asociativo.
$campos_recibidos = array ();
$i = 0;
while ($i < $cant_tablas) {
// Imprime el nombre de la tabla
echo '<li>' . $tabla_nombres[$i] . "\n<ul>\n";
$campos = mysql_list_fields ($db, $tabla_nombres[$i]);
$c = 0;
while ($c < mysql_num_fields($campos)) {
$nombres_campos[$c] = mysql_field_name ($campos, $c) ;
if (isset ($campos_recibidos[$nombres_campos[$c]]))
array_push ($campos_recibidos[$nombres_campos[$c]],
$tabla_nombres[$i]);
else
$campos_recibidos = array_merge ($campos_recibidos,
array (
$nombres_campos[$c] =>
array ($tabla_nombres[$i])
));
// Imprime el nombre de los campos
echo '<li>' . $nombres_campos[$c] . "</li>\n";
$c++;
}
print "</ul></li>\n";
$i++;
}
print "</ul>\n";
reset ($campos_recibidos);
while (list ($nombre, $tablas) = each ($campos_recibidos)){
$cantidad = count ($tablas);
if ($cantidad > 1) {
print "Existe un campo llamado $nombre en las siguientes tablas:\n";
print "<ul>\n";
for ($i = 0; $i < $cantidad; $i++)
print '<li>' . $tablas[$i] . "</li>\n";
print "</ul><br />\n";
}
}
?>
Esta solución básicamente utiliza un arreglo asociativo, en el que las llaves corresponden a los nombres de los campos que tienen tus tablas. Y para cada una de estas llaves se define un arreglo con los nombres de las tablas que contienen un campo con ese nombre.
De este modo, al final lo que se hace es observar cuáles de esos arreglos tienen más de un elemento (es decir, cuáles campos están en más de una tabla) y se imprime el resultado. Espero que sea algo similar a lo que estás necesitando.
La solución que se te ha ocurrido y has escrito tiene elementos interesantes, pero eventualmente falla porque parte del contenido del arreglo $nombres_campos, y si te das cuenta, éste arreglo cambia cada vez que procesas una tabla. Creo que con lo que debes resultar es una lista de los campos que tiene la última tabla que el programa procesó (o incluso puede listar campos de otras tablas, si hay tablas con una mayor cantidad de campos que esa última tabla).
Por último, quería tan solo decirte que la frase que usas como firma es muy bonita... es de las pocas firmas que me han parecido interesantes en alguna forma. :) Saludos.