mysql — сравнивает два двумерных массива в PHP с ошибкой array_diff

Вопрос мог быть другим, например: сравнить две таблицы в MySQL по конкретному показателю. В моих таблицах есть измерение (дата) и метрика (число), и я хочу проверить, получаю ли я одно и то же число для одной и той же даты.

В качестве решения я начал создавать PHP-скрипт, в котором содержимое таблицы будет помещено в массивы. Затем я сравниваю эти массивы, чтобы отследить различия.

Если число не совпадает в двух таблицах на одну и ту же дату, я напечатаю «дата, номер из таблицы 1 — номер из таблицы 2».

Вот мой код, но кажется, что у меня проблема с array_diff:

// Connect to the database (mySQL)
$Db = mysqli_init();
$Db->options(MYSQLI_OPT_LOCAL_INFILE, true);
$Db->real_connect($servername, $username, $password, $dbname, 3306);

// Creation of 1st Array
$result_one  = array();

// Creation of 1st SQL query
$sql = "select date, sum(number) from Table1 group by date";

// Run the 1st query
$query = $Db->query($sql);

// Save the results of the 1st query in the 1st array called result_one
$i = 0;
while ($row = $query->fetch_assoc())
{
echo "aaa";
$result_one[$i] = $row;
$i++;
}

// Print the results (array)
print_r ($result_one);

#####################################################

// Creation of 2nd Array
$result_two  = array();

// Creation of 1st SQL query
$sql = "select date, sum(number) from Table2 group by date";

// Run the 1st query
$query = $Db->query($sql);

// Save the results of the 1st query in the 1st array called result_two
$i = 0;
while ($row = $query->fetch_assoc())
{
echo "aaa";
$result_two[$i] = $row;
$i++;
}

// Print the result_two (array)
print_r ($result_two);

#####################################################

// Use of array_diff
$diff = array_diff($result_one,$result_two);

// Print the differences
print_r($diff);

Я получаю сообщение об ошибке:

PHP Stack trace: … преобразование массива в строку

Таблицы имеют два измерения

0

Решение

Вы можете сделать это с помощью одного запроса SQL:

$sql = "SELECT t1.date, t1.number as `t1num`,
t2.number as `t2num`
FROM `table1` t1, `table2` t2
WHERE t1.date = t2.date AND t1.number != t2.number"$query = $Db->query($sql);


while ($row = $query->fetch_assoc())
{
echo sprintf("mismatch: date: %s, table1: %s, table2: %s", $row['date'], $row['t1num'], $row['t2num']);
}
2

Другие решения

array_diff функция хорошо, я думаю, что проблема в $result_one а также $result_two, Распечатайте их, чтобы увидеть, что в них есть.

0

функция array_diff проверяет только одномерный массив, и это из руководства php

Эта функция проверяет только одно измерение n-мерного массива. Конечно, вы можете проверить более глубокие измерения, используя array_diff ($ array1 [0], $ array2 [0]) ;.

сквозь это ссылка на сайт

Вы можете перебирать массивы и сравнивать каждый одномерный массив.

этот может помочь вам

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector