【问题标题】:How to pass multiple urls from text fields into array如何将文本字段中的多个 url 传递到数组中
【发布时间】:2019-11-29 06:38:37
【问题描述】:

我正在尝试从文本字段中输入多个 url 作为输入,进入数组以提取一些数据。

这是我的代码

<form method="post">
  <textarea name="urls[]" cols="150" rows="15" value=""></textarea>
  <input type="submit" value="Get URLs" />
</form>

if (isset($_POST['urls']) && !empty($_POST['urls'])) {
  // fetch data from specified url

    foreach($_POST['urls'] as $key => $value){ 
        $data = array($value); 
        $r = multiRequest($data);
    }
}
foreach ($r as $key => $url){

$res = preg_match_all( "/[a-z0-9]+[_a-z0-9\.-]*[a-z0-9]+@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})/i", 
$url, $matches);

if($res) {
    foreach(array_unique($matches[0]) as $email) {
        echo $email . "<br />";
    }
} else {
    echo "No data found.";
}

unset($value);

现在,如果我输入单个 url,www.example1.com,如果获取数据(电子邮件)。但如果我在表单中输入多个 url,它就不起作用(未找到数据)。

如果我在数组中手动​​定义 url

$data = array('www.example1.com', 'www.example2.com', 'www.example3.com');  

我可以提取数据(电子邮件)。

如何处理多个条目?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    如果您通过换行来分隔您的网址,我们可以对其进行拆分和处理:

    <form method="post">
        <textarea name="urls" cols="150" rows="15" value=""></textarea>
    <input type="submit" />
    

    如果我们有一个文本区域,请省略输入名称上的方括号。 (或者使用名称属性urls[] 的许多文本输入,将您的输入放入一个数组中。)

    <?php
    $urls = $_POST['urls'] ?? '';
    $urls = preg_split('@\R@', $urls);
    $emails = [];
    foreach ($urls as $url)
    {
        $pattern = '/[a-z0-9]+[_a-z0-9\.-]*[a-z0-9]+@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})/i';
        if (preg_match_all($pattern, $url, $matches))
        {
            foreach(array_unique($matches[0]) as $email) {
                $emails[] = $email;
            }
        }
    }
    
    if(empty($emails)) {
        echo 'No emails found.';
    } else {
        print implode('<br>', $emails);
    }
    

    输入:

    http://example.com
    mailto://foo@example.com
    

    将输出:

    foo@example.com
    

    【讨论】:

      【解决方案2】:

      你通过$data = array($value);这个语法在$data array中传递one value

      替换$data = array($value);

      $data = array(); 
      $data[] = $value;
      

      这会将每个新的value 附加到&amp;data array

      Example

      另外,你有一个文本区域,这意味着它的值(文本输入)作为数组urls[] 的第一个值进入name=urls[]。在 PHP 中,您将获得一个值。

      如果要分离输入的数据,则需要对其进行拆分。例如,如果您将输入以逗号分隔,那么您至少需要设置explode(",",$_POST["urls"];)。顺便把name="urls[]"改成name="urls"

      使用此代码检索逗号分隔的输入:

      <form method="post">
        <textarea name="urls" cols="150" rows="15" value=""></textarea>
        <input type="submit" value="Get URLs" />
      </form>
      
      if (isset($_POST['urls']) && !empty($_POST['urls'])) {
        // fetch data from specified url
      
          $inputs = explode(",",$_POST["urls"]);
          $data = array(); 
          foreach($inputs as $key => $value){ 
              $data[] = $value;
          }
          $r = multiRequest($data);
      }
      

      据我了解,您的 multiRequest() 函数应该处理您的 $data 数组,将此行放在 foreach 循环之外。如果不这样做,您将在每个循环中处理 $data 数组。

      注意: 在这种情况下(在 textarea 中)输入应该用逗号分隔。

      【讨论】:

        猜你喜欢
        • 2013-01-10
        • 2018-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        • 2012-06-19
        相关资源
        最近更新 更多