好的,所以我尝试进行搜索并进行了48小时的研究,但我一直感到头疼,非常感谢我在哪里做错了事。
因此,在我的用例中,我有一个Wordpress网站,我试图基于csv列表以编程方式为帖子设置默认标签,然后将其上传到后端并转换为Array。当页面加载到数组内部时,我需要能够搜索特定字段,然后拉出键值以馈入wp_set_post_tags()参数。这是我到目前为止的内容:
$sku_file_upload = get_field( 'sku_file_upload', 'option' );
$skufileurl = $sku_file_upload['url'];
$skulist = array();
$term_name = get_field('mold_sku');
$rows = file($skufileurl);
$header = array_shift($rows); //get the header out
$header = explode(",", $header);
$final_array = array();
foreach ($rows as $row) {
$row = explode(",", $row);
$header[3] = str_replace(array("\r\n", "\n\r", "\n", "\r"), '', $header[3]);
$row[3] = str_replace(array("\r\n", "\n\r", "\n", "\r"), '', $row[3]);
$row[3] = str_replace(array("|"), ',', $row[3]);
$final_array[] = array($header[0] => $row[0], $header[1] => $row[1], $header[2] => $row[2], $header[3] => $row[3]);
}
这完全可以按预期方式工作,并为我提供了以下数组(41个值,在此处缩小以供查看):
(
[0] => Array
(
[Mold SKU] => 12MM-SM-SQ
[Title] => 12mm Squares
[Category] => Earings|Earings > Fishhooks
[Tags] => square ,
)
[1] => Array
(
[Mold SKU] => 12MM-SQ-HOLLOW-DROP
[Title] => Square Hollow Drop Studs
[Category] => Earings|Earings > Studs
[Tags] => square ,
)
)
总体而言,我曾考虑过修改代码以提供另一种搜索方式,但无法弄清楚如何使其工作,但也会显示该版本。唯一的变化是对上面的最后一个foreach循环,以提供我在关联数组名称中的每个帖子上寻找的值:
foreach ($rows as $row) {
$row = explode(",", $row);
$header[3] = str_replace(array("\r\n", "\n\r", "\n", "\r"), '', $header[3]);
$row[3] = str_replace(array("\r\n", "\n\r", "\n", "\r"), '', $row[3]);
$row[3] = str_replace(array("|"), ',', $row[3]);
$final_array[$row[0]] = array($header[1] => $row[1], $header[2] => $row[2], $header[3] => $row[3]);
}
哪些可以给我以下内容?
Array
(
[12MM-SM-SQ] => Array
(
[Title] => 12mm Squares
[Category] => Earings|Earings > Fishhooks
[Tags] => square ,
)
[12MM-SQ-HOLLOW-DROP] => Array
(
[Title] => Square Hollow Drop Studs
[Category] => Earings|Earings > Studs
[Tags] => square ,
)
)
但是我离题,只是想提出这一点,以防它提供解决问题的更好方法。因此,有了该代码后,我便在页面加载上执行以下代码,以查看一切是否正常:
foreach ($final_array as $value){
echo '<pre>';
print_r($value['Mold SKU']);
echo '</pre>';
令人失望的是,我得到了大量空白行,但是如果我用其他任何键(显然是第一个示例中的“ Title”,“ Category”或“ Tags”)替换print_r,情况并非如此。
我想知道发生了什么,是否与-键有关?我不这么认为,因为我将其取出并仍然获得相同的结果。
我永远都无法超越这个阶段,但这是我理想中想要做的:
我在每个页面的后端都有一个自定义字段,即“ mold_sku”,我希望该值成为我在数组中搜索的值。因此,例如当前页面上的SKU可能是“ 12MM-SQ-HOLLOW-DROP”,我想浏览一下我创建的$ final_array,找到该值,然后我需要提取“ Tags”值并插入它们放入wp_set_post_tags()参数。这是我预想的方式:
遍历数组,并通过定义为$ term_name = get_field('mold_sku');的$ term_name搜索来查找包含我需要的值的子数组。并将其输入$ mold_sku。
使用该变量执行:
wp_set_post_tags($ post_id,$ tags,true);
我不会在这里放入我尝试过的所有forloop变量,因为它不会使事情变得更加清晰(至少我不这么认为),而且我已经感觉很清澈了。< / p>
感谢所有可以帮助我指出正确方向的帮助。
编辑
执行此操作的更好方法是在多维数组中搜索需要的信息的数组,并返回该值的数组以便我可以对其进行操作?
CSV供参考
Mold SKU,Title,Category,Tags
12MM-SM-SQ,12mm Squares,Earings|Earings > Fishhooks,square |
12MM-SQ-HOLLOW-DROP,Square Hollow Drop Studs,Earings|Earings > Studs,square |
12MM-SQ-O-CUTOUT,Square O Cutouts,Earings|Earings > Fishhooks,square | o |
13MM-CIRCLES,13mm Circles,Earings|Earings > Fishhooks,circle |
14MM-SS-STUD,Studs,Earings|Earings > Studs,metal|stainless-steel |
14MM-TRI,Triangles,Earings|Earings > Fishhooks,triangle |
16MM-SS-CIRCLES,Stainless Steel Circles,Earings|Earings > Fishhooks,metal|stainless-steel |
17MM-BBALL-DIAMONDS,17mm Baseball Diamonds,Earings|Earings > Fishhooks,baseball-diamond|
17MM-BBALL-DIAMOND-STUD,17mm Baseball Diamond Studs,Earings|Earings > Studs,baseball-diamond|
17MM-ROUND-CROSS,Rounded Cross,Earings|Earings > Fishhooks,round-cross |
18MM-DROPS,Drops,Earings|Earings > Fishhooks,drop|
18MM-STAR,Gold Stars,Earings|Earings > Fishhooks,star |
19MM-OVAL,Ovals,Earings|Earings > Fishhooks,oval|
20MM-CIRCLES,Circles,Earings|Earings > Fishhooks,circle|
25MM-CIR-CUT,25mm Circle Cutouts,Earings|Earings > Fishhooks,circle |
26MM-RECT-BAR,26mm Rectangle Bars,Earings|Earings > Fishhooks,rectangle-bars|
28MM-SQ-HOLLOW,Hollow Squares,Earings|Earings > Fishhooks,square |
30MM-LEAVES,Leaves,Earings|Earings > Fishhooks,leaf|
33MM-SKIMBOARD,Skimboards,Earings|Earings > Fishhooks,skim-board |
36MM-LONG-TRI,Long Triangles,Earings|Earings > Fishhooks,triangle |
38MM-DIAMOND,Diamonds,Earings|Earings > Fishhooks,diamond |
38MM-DIAMOND-CUT,Diamond Cutouts,Earings|Earings > Fishhooks,diamond |
39MM-PENTAKINDAGON,Pentakindagon,Earings|Earings > Fishhooks,pentagon |
40MM-CIR-CUTOUT,Circle Cutouts,Earings|Earings > Fishhooks,circle|
56MM-SQ-WIN,Square Windows,Earings|Earings > Fishhooks,square |
9MMCIR-19MMOVAL-STUD,Circle Oval Studs,Earings|Earings > Studs,oval|
CIR-CAPSULE-CUT-STUD,Circle Capsule Cutouts,Earings|Earings > Fishhooks,capsule|circle |
CIRCLE-SQ-STUD,Circle Hollow Square Studs,Earings|Earings > Studs,square|
CIR-CUT-SQ-CUT,Circle Squares,Earings|Earings > Fishhooks,circle|square |
CIR-SQ-CUT-STUD,Circle Square Cutout Studs,Earings|Earings > Studs,circle|square |
HOLLOW-DROP,Hollow Drops,Earings|Earings > Fishhooks,drop|
SQ-CUT-STUD,Square Cutout Studs,Earings|Earings > Studs,square |
SS-PRISM,Hollow Prisms,Earings|Earings > Fishhooks,metal|stainless-steel |
TRI-STUD,Triangles,Earings|Earings > Fishhooks,triangle |
OBTUSE-TRI,Obtuse Triangle,Earings | Earings > Fishhooks,triangle |
CIR-SIDE-SQ-CUTOUT,Circle Side Square Cutout Studs,Earings|Earings > Studs,circle | square |
CIR-CLOUD,Circle Cloud Studs,Earings|Earings > Studs,circle | cloud |
LINK-CHEVRON,Link Chevrons,Earings | Earings > Fishhooks,chevron | link |
DIAMOND-CHEVRON,Diamond Chevrons,Earings | Earings > Fishhooks,chevron | diamond |
9MM-CIR,9mm Circles,Earings | Earings > Fishhooks,circle |
11MM-CIR,11mm Circle Studs,Earings|Earings > Studs,circle |
答案 0 :(得分:0)
ini_set('auto_detect_line_endings', true);
$fp = fopen($skufileurl, 'r');
$termName = 'Example SKU';
$csvHeader = fgetcsv($fp);
while ($csvRow = fgetcsv($fp)) {
$keyedCsvRow = array_combine($csvHeader, $csvRow);
if ($keyedCsvRow['Mold SKU'] === $termName) {
$keyedCsvRow['Category'] = explode('|', $keyedCsvRow['Category']);
$keyedCsvRow['Tags'] = explode('|', $keyedCsvRow['Tags']);
$finalArray = $keyedCsvRow;
break;
}
}
fclose($fp);
工作example。
$finalArray['Tags']
标题:从csv文件中解析和过滤数据
嗨,我正在尝试读取Tags
的csv文件,如下所示:
// example data of csv file (with header!)
对于给定的Tags
,我需要获取所有$term_name
,该Mold SKU
必须与// code attempt (+optionally comment where you got stuck)
相匹配。这就是我尝试过的。
document.body.addEventListener('change', event => {
const masterElement = document.getElementById(event.target.id + 'Master');
if (masterElement !== null) {
masterElement.value = event.target.value;
ReDraw();
};
});
非常感谢您的帮助:)
快乐编码:)