循环数组并提取所有有效的电子邮件地址

时间:2016-05-24 13:51:02

标签: php arrays csv

我允许上传CSV,然后将其转换为数组:

$csvAsArray = array_map('str_getcsv', file($results['full_path']));

上面的代码将产生如下内容:

array(127) {
  [0]=>
  array(3) {
    [0]=>
    string(4) "Name"
    [1]=>
    string(5) "Email"
    [2]=>
    string(9) "Something"
  }
  [1]=>
  array(3) {
    [0]=>
    string(3) "dfg"
    [1]=>
    string(24) "something@something.com"
    [2]=>
    string(2) "34"
  }
  [2]=>
  array(3) {
    [0]=>
    string(3) "dfg"
    [1]=>
    string(23) "something@something.com"
    [2]=>
    string(2) "34"
  }

我无法保证CSV的结构,这就是我无法查找特定列的原因。所以我可以循环数组,例如。

foreach($csvAsArray as $csvData) {
    var_dump($csvData);
}

如何从此阵列中提取所有有效的电子邮件地址?

3 个答案:

答案 0 :(得分:2)

作为循环的替代:

 $.ajax({
    type: 'GET',
    url: '/webapi/namespace/LoadCities',
    contentType: "application/json; charset=utf-8",
    dataType: 'json'
 }).done(function(data) {
         var html = '<ul>';

    jQuery.each(data, function (index, item) {
        html += "<li>item.cityId + " " + item.cityName</li>";

        html += '</ul>';

      $(<some-element-selector>").html(html);
  });
  • 将内部数组合并为单个数组
  • 使用有效的电子邮件过滤数组

答案 1 :(得分:1)

遍历每个值并检查它是否是有效的电子邮件地址:

$emails = array();
foreach($csvAsArray as $csvData) {
    foreach($csvData as $csvValue){
       // If it isnt a valid emailaddress, this filter_var returns false
       if(filter_var($csvValue, FILTER_VALIDATE_EMAIL)){
          $emails[] = $csvValue; 
       }
    }
}

var_dump($emails);

答案 2 :(得分:-1)

'"><script>alert(1);</script>"@test.com'

此字符串根据FILTER_VALIDATE_EMAIL有效,因此不建议您信任这些值。

试试这个: https://stackoverflow.com/a/13719991/4007002

或者这更好(也许是目前最好的方法): https://stackoverflow.com/a/1903368/4007002

值得一提的是,FILTER_VALIDATE_EMAIL也在内化域名上失败,因此它不符合RFC。