[英]Get record from csv by column name
我有一個csv表(我的csv文件http://jpst.it/1GCd9 )
| id | email | name | google.com | yahoo.com |
| 1 | email1@email.com | jack | | + |
| 2 | email2@email.com | jack | + | |
| 3 | email3@email.com | jack | | |
是否可以通過列名獲得“+”的電子郵件?
例如,我想指定google.com並獲取電子郵件email2@email.com
我只知道如何按列id獲取數據:(
while (($row = fgetcsv($fileHandle, 0, ",")) !== FALSE) {
if($flag) { $flag = false; continue; }
$explode = explode(";",$row[4]);
echo $explode[4]. ", ";
}
通過使用已清理的CSV(刪除所有多余的空白區域和數組過濾器,您可以獲得所需的內容)。
我使用了array_map('trim', array_filter(explode($delimeter, $lines[0]), function($entry){return !empty($entry);}));
清理來自空格的所有輸入,並丟棄最后一個管道字符末尾的“空”標題。
請參閱以下函數: array_map , trim , array_filter 。
然后,當所有內容都“標准化”時,我們有一個帶有正確字段的關聯數組,因此我們可以再次使用array_filter進行搜索。 變量$only_with_plus
將只包含與搜索參數匹配的關聯數組。
$only_with_plus = array_filter($entries, function($entry) {
return $entry['google.com'] == '+' && $entry['email'] = 'email2@email.com';
});
在線查看: https : //ideone.com/ZDn2dv
<?php
$CSV = <<<EOF
| id | email | name | google.com | yahoo.com |
| 1 | email1@email.com | jack | | + |
| 2 | email2@email.com | jack | + | |
| 3 | email3@email.com | jack | | |
EOF;
$delimeter = '|';
$lines = explode("\n", $CSV);
$key_names = array_map('trim', array_filter(explode($delimeter, $lines[0]), function($entry){return !empty($entry);}));
$entries = [];
$len = count($lines);
for($c = 1; $c < $len; $c++) {
$line = array_map('trim', array_filter(explode($delimeter, $lines[$c]), function($entry){return !empty($entry);}));
$entry = [];
foreach($line as $key => $value) {
$entry[$key_names[$key]] = $value;
}
$entries[] = $entry;
}
$only_with_plus = array_filter($entries, function($entry) {
return $entry['google.com'] == '+' && $entry['email'] = 'email2@email.com';
});
var_dump($only_with_plus);
// your code goes here
您無法直接過濾csv,但可以在將其解析為數組后對其進行過濾;
http://sandbox.onlinephpfunctions.com/code/f17969e35fcfc5e2f4b2f25202359f1b4cc4840b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.