PHP数组比较和过滤

时间:2013-09-13 07:19:59

标签: php arrays filter

我是PHP的新手并整理出一些代码。这是两个电话号码列表...然后拉出第一个列表的第二个列表OUT中的数字,制作一个新的过滤列表。只需拉入一个列表,完整的代码就可以正常运行。现在我已经修改它以根据第二个列表过滤列表,现在代码失败了,我收到了这个警告:

警告:第7行/var/www/html/send.php中的非法字符串偏移'phone_number'

    // 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'];
    }
第79行(警告来自)是: $ people [] = $ row ['phone_number'];

任何帮助查明错误或改进如何完成此过滤都将非常感激!

4 个答案:

答案 0 :(得分:2)

您忘记了fetch结果集的结果

foreach ($result as $row) {

应该是

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

答案 1 :(得分: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'

答案 2 :(得分:1)

你的$result是一个可遍历的对象,而不是一个数组。见in the docs

  

失败时返回FALSE。对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询,mysqli_query()将返回mysqli_result对象。对于其他成功的查询,mysqli_query()将返回TRUE。

您可以通过两种不同的方式遍历结果:

// precedural style
while ($row = mysqli_fetch_assoc($result)) { ... }
// OOP style
while($row = $result->fetch_assoc()) { ... }

答案 3 :(得分:0)

由于您使用$all_people分配$dnc_people$row['phone_number']$filtered_people可能没有phone_number密钥,而是数字密钥。尝试

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