#php #json
#php #json
Вопрос:
Первый пост, любая помощь приветствуется.
У меня есть файл PHP (массив) с данными из базы данных, которые мне нужно сравнить с файлом JSON (объектом). Просматривая форумы, я видел материалы о запросах jQuery и AJAX, поэтому я подумал, может быть, мне нужно использовать их для моего решения.
Массив PHP
<?php
$codes = [
[
'code' => '1111',
'name' => 'Management',
],
[
'code' => '1305',
'name' => 'Price',
],
[
'code' => '1161',
'name' => 'Service',
]
и массив продолжается.
Объект JSON
[{"name":"Management","code":"1111","accountingArea":"3194","managerUsername":null},
{"name":"Storage","code":"9033","accountingArea":"3194","managerUsername":null}]
это способ форматирования объекта JSON.
По какой-то причине у него нет имени, и я не знаю, является ли это проблемой, когда дело доходит до сравнения двух разных файлов.
Продукт должен быть PHP-скриптом, который сообщает пользователю, какие записи отсутствуют в другом файле.
Единственное, что нужно сравнить, это коды.
Я еще ничего не делал с файлами JSON и тоже новичок в PHP. Пока я включил только оба файла в свой файл сценария и не знаю, с чего начать.
Ответ №1:
Вы можете взять JSON из файла в виде строки и использовать json_decode()
функцию php, эта функция вернет массив php, затем вы можете просто создать cicle foreach и проверить коды
Ваш код должен быть похож на этот
<?php
$codes = [
[
'code' => '1111',
'name' => 'Management',
],
[
'code' => '1305',
'name' => 'Price',
],
[
'code' => '1161',
'name' => 'Service',
]];
$json_str = '[{"name":"Management","code":"1111","accountingArea":"3194","managerUsername":null},
{"name":"Management","code":"11141","accountingArea":"3194","managerUsername":null},
{"name":"Management","code":"1305","accountingArea":"3194","managerUsername":null},
{"name":"Management","code":"1161","accountingArea":"3194","managerUsername":null},
{"name":"Storage","code":"9033","accountingArea":"3194","managerUsername":null}]';
$json_array = json_decode($json_str, true);
$result = array();
$codesN = array_column($codes, 'code');
$i = 0;
for($i; $i < count($json_array); $i ) {
if(in_array($json_array[$i]["code"], $codesN)) {
$result[] = $json_array[$i]["code"];
}
}
var_dump($result);
Это вернет:
array(3) {
[0]=>
string(4) "1111"
[1]=>
string(4) "1305"
[2]=>
string(4) "1161"
}
Комментарии:
1. Как у вас дела
$json_array[$i]["code"] == $codes[$i]["code"]
, если оба массива не имеют одинаковой длины? Вам нужно выполнить цикл для каждого кода в формате json и сравнить его во всех кодах вphp
массиве2. Это зависит от того, что он явно хочет сделать, он также может получить один из двух массивов и выполнить все пользовательские проверки
3. Это также не работает, потому
json_decode()
что по умолчанию будет декодироваться в объект, и ему явно не было указано преобразовать в ассоциативный массив.4. @pavelbere вы тестировали описанную выше функцию? вы сравниваете массивы на основе $i, а не на основе кода!!!! например, если первый код равен 1 в массиве json, а 1 существует в массиве php под номером 4, у вас будет пустое сравнение и ложный результат!
5. @Burhan Kashour Я просто предлагаю идею о том, как это может работать, я не знаю, что именно нужно автору, очевидно, что это не рабочее решение, если кто-то хочет его использовать, он должен адаптировать код для конкретного случая
Ответ №2:
Попробуйте это. Пошаговое объяснение см. в комментариях.
Вывод:
array(2) {
[1]=>
string(4) "1305"
[2]=>
string(4) "1161"
}
Код:
<?php
// Your input array.
$codes = [
[
'code' => '1111',
'name' => 'Management',
],
[
'code' => '1305',
'name' => 'Price',
],
[
'code' => '1161',
'name' => 'Service',
]
];
// Your input JSON.
$json = '[{"name":"Management","code":"1111","accountingArea":"3194","managerUsername":null},{"name":"Storage","code":"9033","accountingArea":"3194","managerUsername":null}]';
// Get differences:
// Get values from $codes that are not present in $json.
// Switch the arguments to perform the inverse comparison.
$diff = array_diff(
array_column($codes, 'code'),
array_column(json_decode($json, TRUE), 'code')
);
var_dump($diff);
/*
Output:
array(2) {
[1]=>
string(4) "1305"
[2]=>
string(4) "1161"
}
*/
Комментарии:
1. Должен ли я вводить все данные из 2 файлов в мой новый PHP-файл? Или я могу работать с require / inlcude?
2. Я не уверен, что полностью понимаю ваш вопрос. Но если ваши входные данные (массив и JSON) находятся в разных местах, вы можете импортировать их, используя либо
include()
илиrequire()
.