ФорумПрограммированиеPHP для идиотов → сравнение значений в 2х массивах

сравнение значений в 2х массивах

  • User_1977

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 20 сентября 2023 г. 15:28

    Добрый день!
    Наведите на верный путь.
    Версия php 5.3.6
    Есть 2 неравнозначных массива. Они заполнены из файлов dbf.
    Массив 1.

    $REP210G = "REP210G.dbf";
    $open_db210 = dbase_open($REP210G, 0);
    $records = dbase_numrecords($open_db210);
    for ($i = 1; $i <= $records; $i++)

    {
    $dbf[$i] = dbase_get_record_with_names($open_db210, $i); // $i+1 если мусор в 0-й строке
    $brr[$i]['lic'] = trim($dbf[$i]['lic']);
    $brr[$i]['add'] = trim($dbf[$i]['add']);
    $brr[$i]['dom'] = trim($dbf[$i]['dom']);
    $brr[$i]['kv'] = trim($dbf[$i]['kv']);

    $lic    = $brr[$i][&#39;lic&#39;];
    $adres  = trim(iconv(&#39;CP1251&#39;,&#39;UTF-8&#39;, $brr[$i][&#39;add&#39;]));
    $house  = trim(iconv(&#39;CP1251&#39;,&#39;UTF-8&#39;, $brr[$i][&#39;dom&#39;]));
    $appart = $brr[$i][&#39;kv&#39;];
    $array_210 = array($lic, $adres, $house, $appart);
    

    }

    Второй массив.

    $db_novakom = 'novakom.dbf';
    $open_db_novakom = dbase_open($db_novakom, 0);
    $records_nova = dbase_numrecords($open_db_novakom);
    for ($n = 1; $n <= $records_nova; $n++)
    {
    $dbf[$n] = dbase_get_record_with_names($open_db_novakom, $n); // $i+1 если мусор в 0-й строке
    $brr[$n]['NUM'] = trim($dbf[$n]['NUM']);
    $brr[$n]['SUMMA'] = trim($dbf[$n]['SUMMA']);
    $brr[$n]['N_P'] = trim($dbf[$n]['N_P']);
    $brr[$n]['ADATEOPL'] = trim($dbf[$n]['ADATEOPL']);
    $brr[$n]['NAZN'] = trim($dbf[$n]['NAZN']);

    $number = $brr[$n][&#39;NUM&#39;];
    $sum    = $brr[$n][&#39;SUMMA&#39;];
    $descr  = trim(iconv(&#39;CP1251&#39;,&#39;UTF-8&#39;, $brr[$n][&#39;N_P&#39;]));
    $date   = $brr[$n][&#39;ADATEOPL&#39;];
    $nazn   = $brr[$n][&#39;NAZN&#39;];
    $open_nova = array($number, $sum, $descr, $date, $nazn);
    

    }

    Необходимо сравнить их значения по полям из массива $open_nova в поле $number со значением в массиве $array_210 поля $lic и вывести результат в файл db_out.dbf имеющий структуру

    $open_db = dbase_open($db_out, 0);
    $def = array(
    array("SUMMA", "C", 18),
    array("ADATEOPL", "C", 10),
    array("N_P", "C", 254),
    array("NUM", "C", 13),
    array("ADD", "C", 31),
    array("DOM", "C", 3),
    array("KV", "C", 3),
    array("NAZN", "C", 10)
    );
    }

    т.е. на выходе вывести данные найденных значений поля $lic в массиве $array_210
    Сравнивать пытался таки образом.
    function diff(array $array_210, array $open_nova): array {
    $result = $array_210;
    foreach ($result as $key => $values)
    {
    if( array_key_exists($key, $open_nova))
    {
    $result[$key] = array_diff($values, $open_nova[$key]);
    if($result[$key] === [])
    {
    unset($result[$key]);
    }
    }
    }
    return $result;
    }
    print_r(diff($array_210, $open_nova));
    но выдаётся ошибка 404 Not Found.

  • User_1977

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 21 сентября 2023 г. 10:08, спустя 18 часов 40 минут 3 секунды

    Изменил код для поиска одинаковых значений в $lic и $number

    $array_210 = array($lic, $adres, $house, $appart);
    $open_nova = array($number, $sum, $descr, $date, $nazn);
    $c = array_intersect($array_210, $open_nova);
    foreach ($c as $v)
    {
    if ($v == $number)
    echo $number;
    echo $sum;
    echo $descr;
    echo $date;
    echo $nazn;
    }
    print_r($c);

    но результат почему-то NULL

Пожалуйста, авторизуйтесь, чтобы написать комментарий!