valores multidimensionales multidimensional manejo keys elementos comparar array_intersect array_diff array php arrays multidimensional-array array-difference

php - multidimensionales - ¿Por qué array_diff() le da a Array un error de conversión de cadenas?



comparar valores de un array php (5)

Como array_diff solo puede tratar con una dimensión, puede:

  • convierta su matriz multidimensional en una dimensión, por ejemplo, mediante:

    • aplanar una matriz multidimensional , por ejemplo:

      while ($arr) { list($key, $value) = each($arr); is_array($value) ? $arr = $value : $out[$key] = $value; unset($arr[$key]); } // Now $out is flatten version of $arr.

    • serializar la matriz , por ejemplo:

      $results = array_diff(array_map(''serialize'',$a2), array_map(''serialize'',$a1));

  • usar la función recursiva array_diff personalizada como ,

Obtengo el error de conversión de matriz a cadena para la siguiente línea:

$diff = array_diff($stockist, $arr);

Aquí, $arr es una matriz decodificada a partir de un archivo JSON. Utilizando la función is_array() pude verificar que ambos parámetros son matrices. ¿Alguien me puede señalar el problema

$stockist = array(); while (!feof($file_handle)) { $line_of_text = fgetcsv($file_handle); $query = "SELECT * FROM reorderchart WHERE medicine = ''" . trim($line_of_text[3]) . "'' ORDER BY medicine"; $result = mysql_query($query); if (trim($line_of_text[2]) - trim($line_of_text[1]) <= 0) { while ($row = mysql_fetch_array($result)) { $file = "results.json"; $arr = json_decode(file_get_contents($file),true); $pharmacy = trim($row[''Medicine'']); if (isset($stockist[$pharmacy])) { $medicine = $stockist[$pharmacy]; $medicine[] = trim($row[''Stockist'']); $stockist[$pharmacy] = $medicine; } else { $medicine = array(); $medicine[] = trim($row[''Stockist'']); $stockist[$pharmacy] = $medicine; } } } } $diff = array(); $diff = array_diff_assoc($stockist,$arr); ksort($diff); foreach ($diff as $key => $value) { echo "<table align=''center'' border=''1''>"; echo "<tr><td align = ''center''> <font color = ''blue''> $key</td></tr>"; foreach($value as $key1 => $value1) { echo "<tr><td align =''center''>$value1</td></tr><br>"; } echo "</table>"; }


De acuerdo a esto:

php -r ''array_diff(array("a" => array("b" => 4)), array(1));'' PHP Notice: Array to string conversion in Command line code on line 1 PHP Stack trace: PHP 1. {main}() Command line code:0 PHP 2. array_diff() Command line code:1

Una de tus matrices es multidimensional.

array_diff solo comprueba una dimensión de una matriz n-dimensional. Por supuesto, puede verificar dimensiones más profundas usando array_diff($array1[0], $array2[0]);


De acuerdo con la documentación de PHP para la función

Nota: Dos elementos se consideran iguales si y solo si (cadena) $ elem1 === (cadena) $ elem2. En palabras: cuando la representación de cadena es la misma.

Para obtener más información, consulte http://php.net/manual/en/function.array-diff.php


Sí, la respuesta estricta es porque "Una de tus matrices es multidimensional".

Otra nota útil podría ser, dependiendo de sus necesidades de análisis posterior de las diferencias reales , considere primero probar sus matrices con:

$diff = strcmp(json_encode($stockist), json_encode($arr));

o

$diff = strspn(json_encode($stockist) ^ json_encode($arr), "/0");

o

$diff = xdiff_string_diff(json_encode($stockist), json_encode($arr));

Todas estas opciones compararán todo el árbol de la matriz, no solo el nivel superior.


Tengo el mismo error y encontré el siguiente informe de error para php:

https://bugs.php.net/bug.php?id=60198

Algunas de las funciones array_ * que comparan elementos en matrices múltiples lo hacen por (cadena) $ elem1 === (cadena) $ elem2.

Si $ elem1 o $ elem2 es una matriz, se lanza la matriz al aviso de cadena.

Dos ejemplos de funciones que pueden lanzar esto son array_intersect () y array_diff ().

Si no se espera que estas funciones tomen arrays con otras matrices como valores, esto debe mencionarse en las páginas de documentación.

Ese informe describe por qué php arroja un error al comparar una matriz multidimensional.