2013-09-13 5 views
-1

Я новичок в PHP и разбираю код. Это принимает два списка телефонных номеров ... затем вытягивает числа во втором списке OUT первого списка, создавая новый отфильтрованный список. Полный код работал нормально, просто втянув один список. Теперь, когда я изменил его, чтобы отфильтровать список, основанный на втором списке, код теперь терпит неудачу, и я получаю это предупреждение:Сравнение и фильтрация PHP-массивов

Предупреждение: Неверное смещение строки 'phone_number' в/var/www/html/send. PHP на линии 7

// Get all of the phone numbers from the List 
$sql = "SELECT phone_number FROM dial_list WHERE list_id='$list'"; 
$result = mysqli_query($link, $sql); 
echo mysqli_error($link); 
foreach ($result as $row) 
    { 
     $all_people[] = $row['phone_number']; 
    } 

// Get phone numbers from our DNC list 
$sql = "SELECT phone_number FROM dial_dnc"; 
$result = mysqli_query($link, $sql); 
echo mysqli_error($link); 

    foreach ($result as $row) 
    { 
     $dnc_people[] = $row['phone_number']; 
    } 

// Remove DNC numbers from list 
$filtered_people = array_diff($all_people, $dnc_people); 
    foreach ($filtered_people as $row) 
    { 
     $people[] = $row['phone_number']; 
    } 

Line 79 (где предупреждение исходит от) является: $ люди [] = $ строки [ 'phone_number'];

Любая помощь, чтобы точно определить ошибку или улучшить ее выполнение, будет с благодарностью!

ответ

0

Поскольку вы назначаете $all_people и $dnc_people с $row['phone_number'], $filtered_people не имеет phone_number ключ, вместо того, чтобы быть номером кузова, наверное. Попробуйте

foreach($filtered_people as $key => $value) 
{ 
    $people[] = $value; 
} 
+0

Это решение сработало для меня. Очень признателен! – N8Dog

+0

@ N8Dog: Отметьте этот ответ так, как принято тогда, поэтому другие, смотрящие на этот вопрос, могут видеть, что именно это и решило вашу проблему. :) –

2

Вы забыли fetch результатов от вашего результирующего

foreach ($result as $row) { 

должен быть

while ($row = mysqli_fetch_assoc($result)) { 
+0

Есть 3 вхождения Еогеаспа ... два, которые выглядят как то, что вы вывесили здесь и третья проблема линия. Когда я меняю первые два на использование mysqli_fetch_assoc, это не имеет значения. Изменение третий к этому: 'в то время как ($ строка = mysqli_fetch_assoc ($ filtered_people)) {' теперь дает мне это предупреждение: Предупреждение: mysqli_fetch_assoc() ожидает параметр 1, чтобы быть mysqli_result, массив приведен в/вар /www/html/send.php в строке 81 – N8Dog

2

Это можно легко сделать с помощью только MySQL.

SELECT 
dl.phone_number 
FROM dial_list AS dl 
INNER JOIN dial_dnc as dnc 
ON (dl.phone_number = dnc.phone_number) 
WHERE list_id='$list' 
1

$result - это объект, подлежащий перемещению, а не массив. как видно, in the docs

Возвращает FALSE при сбое. Для успешных запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query() вернет объект mysqli_result. Для других успешных запросов mysqli_query() вернет TRUE.

Вы можете цикл над результатами в 2 различных способах:

// precedural style 
while ($row = mysqli_fetch_assoc($result)) { ... } 
// OOP style 
while($row = $result->fetch_assoc()) { ... } 
Смежные вопросы