note 55169 added to function.array-diff
| From: | jestrada at webmedia dot com dot mx | Date: | Wed, 27 Jul 2005 00:04:43 +0000 |
| Subject: | note 55169 added to function.array-diff | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-92517@lists.php.net to get a copy of this message | ||
Esta funcion tiene un bug, al parecer en una variable de contador, ya que en algunas ocasiones llega
a regresar elementos vacios en el arreglo del resultado. Esta variable de contador probablemente se
encuentre en la parte que va agregando los elementos diferentes entre los arreglos al nuevo arreglo.
Aqui una version que hice de la función, solo que esta limitada a comparar el primer arreglo solo
con un arreglo mas, y no con n arreglos como la función original del PHP.
Fue al hacer esta funcion que me di cuenta del probable lugar del error en la funcion original de
PHP
Espero les sirva
--------
function fcn_array_diff($arr_comparado, $arr_compararEn) //prke no sirve la maldita funcion
array_diff que trae por default php
{
$i_maxComparado = count($arr_comparado);
$i_maxCompararEn = count($arr_compararEn);
$arr_result[0] = "";
$i_result = 0;
// echo "Ini<hr><p>";
for ($i=0; $i<$i_maxComparado; $i++)
{
$st_valorComparado = chop($arr_comparado[$i]);
// echo "<font color=\"cyan\">Comparado:
".$st_valorComparado."</font><p>";
$l_existe = false;
for ($j=0; $j<$i_maxCompararEn; $j++)
{
$st_valorCompararEn = chop($arr_compararEn[$j]);
// echo "<font color=\"orange\">Comparar en:
".$st_valorCompararEn."</font><p>";
if ($st_valorComparado == $st_valorCompararEn)
{
$l_existe = true;
break;
}
}
if ($l_existe == false)
{
$arr_result[$i_result] = $st_valorComparado;
// echo "<font color=\"pink\">Agregar:
".$arr_result[$i_result]."</font><p>";
$i_result++;
}
}
$i_maxResult = count($arr_result);
for ($i=0; $i<$i_maxResult; $i++)
{
// echo "<font color=\"blue\">(:
".$arr_result[$i].")</font><p>";
}
// echo "fin<hr><p>";
return $arr_result;
}
----------
NOTA: Las partes que están comentadas fueron banderas que puse para ir localizando el posible error
que menciono.
----
Manual Page -- http://www.php.net/manual/en/function.array-diff.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+55169
Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+55169&report=yes&reason=added+to+the+manual
Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+55169&report=yes&reason=bad+code
Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+55169&report=yes&reason=spam
Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+55169&report=yes&reason=useless
Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+55169&report=yes&reason=non-english
Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+55169&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+55169&report=yes
Search -- http://master.php.net/manage/user-notes.php