【问题标题】:Simple question on foreach loop question with array with 2 variables. (with code)带有 2 个变量的数组的 foreach 循环问题的简单问题。 (带代码)
【发布时间】:2011-08-01 18:09:51
【问题描述】:

如何编辑这个 foreach 循环,以便能够使用 strpos 查看 q 是否在 label 中找到? 结果数组将包含这些值。

$q 可能是 annaannreas john

<?php

$q = $_GET["q"];
if (!$q) return;

$data = Array(
    Array(
        'label' => 'anna c13',
        'category' => 'Products'
    ),
    Array(
        'label' => 'anders andersson',
        'category' => 'People'
    ),
    Array(
        'label' => 'andreas johnson',
        'category' => 'People'
    )
);

$result = array();
foreach ($data as $value) {
    array_push($result, array(
        "label" => $value["label"],
        "category" => $value["category"]
    ));
}


$json = json_encode($result);

echo $json;
?>

【问题讨论】:

  • 您的循环不起作用,因为$key 包含一个数字索引,而$value 包含一个数组。但是,我不确定你想做什么?将labelscategories 的列表转换为namesemails 的JSON?电子邮件地址应该来自哪里?
  • 你想做什么? $result 数组应该是什么样子的?
  • 对不起,我更新了我的问题以便更好地理解。结果数组必须包含那些在label 中找到q 的值。
  • 有什么例子吗?也许给我们看看网址。
  • $q 可能是 annaannreas john

标签: php arrays foreach json


【解决方案1】:

这将输出 $data 中的每个数组,其中 $q 在 'label' 中的某个位置。

   <?php

    if( !isset( $_GET["q"] )) return;
    $q = $_GET["q"];

    $data = Array(
        Array(
            'label' => 'anna c13',
            'category' => 'Products'
        ),
        Array(
            'label' => 'anders andersson',
            'category' => 'People'
        ),
        Array(
            'label' => 'andreas johnson',
            'category' => 'People'
        )
    );

    $result = array();
    foreach ($data as $value) {
        if( strpos( $value['label'], $q ) !== false ) {
            $result[] = $value;
        }
    }


    $json = json_encode($result);

    echo $json;
    ?>

【讨论】:

  • 谢谢。这比mysql查询快吗?两种方式都需要搜索大量数据。在 SQL 查询中,我使用 MATCH AGAINST。
  • 我不确定 MATCH AGAINST,但我知道如果将此与使用 LIKE 的 mysql 查询进行比较,mysql 会快得多。
【解决方案2】:

您还没有为 $data 数组定义键 - 所以它自动采用以下形式:

 array(
    0=>array(...),
    1=>array(...),
    2=>array(...)
  )

这意味着您在 int 上使用 strtolower - 所以这可能就是它失败的原因。

【讨论】:

  • 我看到的唯一strtolower 是在 q 变量上。你怎么知道它失败了?
  • 我在我的更新中删除了 strtolower,因为我认为这不是必须的。
【解决方案3】:
foreach ($data as $value) {
    if(strpos($value['label'], $q) !== false){
        $result[] = $value;
    }
}

【讨论】:

  • 感谢您的回答。对不起,我不能投票给你,这是因为我的分数低。何时需要为输入使用远程文件而不是将它们放在 jQuery 函数中?
  • @JPampos:“输入的远程文件”是什么意思
  • 我的意思是把 json 数据放在一个远程文件中,就像我上面的例子一样。在其他情况下,json 在 jquery 函数中
  • @JPampos:在这种情况下,您将不得不在 JavaScript 上运行一个循环。但是,这是另一个问题,您应该弄清楚,或者至少尝试一下,并在此处尝试在 SO 上提出另一个问题。
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多