Как сделать поиск по массиву из БД?

Статус
В этой теме нельзя размещать новые ответы.

Албибеков

Постоялец
Заблокирован
Регистрация
24 Июн 2016
Сообщения
35
Реакции
33
Всем доброго времени суток.
Стопор с массивами произошел((.

PHP:
<?php
//========== ДАННЫЕ ИЗ БД ===============//
$query = $mysqli->query("SELECT `users` FROM `_shopper`");
if ($query->num_rows)
{
$datau = array();
while($row = $query->fetch_assoc())
{
$datau[] = $row['users'];
}
print_r($datau); // юзеры из БД

//Array ( [0] => vika [1] => masha [2] => denis [3] => igor [4] => misha [5] => sasha [6] => valera

//========== НИЖЕ ПАРСЕР ============//

$result = array();
for($i=1;$i<=3;$i++)
{
$url = "https://shop.ru/list?order&page=".$i; // проходим по 3 страницам
$text = html_entity_decode(curlfun($url));      // парсим через CURL

preg_match_all('~<span class="user">(.*?)</span>~is', implode($text[1]), $user);
preg_match_all('~<span class="phone">(.*?)</span>~is', implode($text[1]), $phone);

$u = $user[1];  // 100 человек
$p = $phone[1]; // 100 номеров телефонов

$result[] = array_combine($u, $p);

}
}
print_r($result); // спарсенные юзеры и телефоны

//из-за 3х страниц, выводится такой монстр
//Array ( [0] => Array ( [vika] => 890632555511 [masha] => 89223336666 [kesha] => 890158999212 ...
//           [1] => Array ( [denis] => 89325989898 [igor] => 902698752665 ...
//           [2] => Array ( [misha] => 890569696922 [valera] => 95236994552 ...

//???????? СТОПОР(( ???????

if (strlen($phonne) < 8) { //длинна номера
$mysqli->query("UPDATE `_shopper` SET `users` = '".$usser."', `phone` = '".$phonne."'");
}else{
$mysqli->query("UPDATE `_shopper` SET `users` = '".$usser."', `phone` = '0'");
}

Суть. Есть левый сайт (shop.ru) - в нем имена пользователей и телефоны (настоящие)!

Есть моя БД - в ней настоящие и левые (придуманные) имена и номера телефонов.
Как сопоставить/проверить/прочекать имена из БД в спарсенные, так, чтобы те которые совпадают - обновились номера телефонов в БД, а которые придуманные (имена+номера телефонов) в БД, а нет на спарсенном - заменились на нуль?

Пробовал через in_array, array_search - даже ошибок не выдает(( белый лист

+ дополнение

$result[] = array_combine($u, $p);
менял ключ на значение - не помогло((
$result[] = array_combine($p, $u);
 
Последнее редактирование модератором:
PHP:
$result = array_merge($result , array_combine($u, $p));

если не парит нагрузка на базу, можно сделать так:
PHP:
$mysqli->query("UPDATE `_shopper` SET `phone` = '0' WHERE 1");
foreach ($result as $usser=>$phonne)
if (strlen($phonne) < 8) { //длинна номера
$mysqli->query("UPDATE `_shopper` SET `phone` = '".$phonne."' WHERE `users` = '".$usser."'");
}
 
Последнее редактирование:
Не вышло(((, ибо $result , array_combine($u, $p) - одно и тоже.
+ array_merge - не канает((((
+
Менял на $datau, $result

foreach ($result as $usser=>$phonne)
var_dump($phonne); // выводит два разных слитных массива

string(4) "vika" string(5) "masha", а потом по окончании 1го массива выводит: [vika]=> string(9) "890632555511" [masha]=> string(9) "89223336666"

НЕ учли((
PHP:
print_r($datau); // юзеры из БД

//Array ( [0] => vika [1] => masha [2] => denis [3] => igor [4] => misha [5] => sasha [6] => valera
 
Написал. Изначально array_combine юзает только одно уникальное значение и прописывает последний ключ(((

т.к. for сделал 3 этажа. выпрямил через рекурсив в один массив
PHP:
$iteratoru = new RecursiveIteratorIterator(new RecursiveArrayIterator($u));
$uOut = iterator_to_array($iteratoru, false);

аналогично и номера телефонов.

Объединить пришлось через
PHP:
function array_combine_($keys, $values)
{
    $result = array();
    foreach ($keys as $i => $k) {
        $result[$k][] = $values[$i];
    }
    array_walk($result, create_function('&$v', '$v = (count($v) == 1)? array_pop($v): $v;'));
    return    $result;
}

Получился многомерник с одним и двумя значениями.
Нужно было сгладить, т.к. в некоторых строках первый ключ имел результат, а второй "ноль", через
PHP:
function array_flatten($array = null) {

В итоге все работает. Топик можно закрыть!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху