我进行Ajax调用,以便从这样的数组中过滤值:
<?php
$dataset = array_filter($_REQUEST['dataset'], function ($v){
return filterArray($_REQUEST['keyword'], $v);
});
function filterArray($needle,$haystack){
$needle = strtolower($needle);
foreach($haystack as $v){
if (stripos($v, $needle) !== false){
return true;
}
};
}
echo json_encode($dataset, JSON_UNESCAPED_UNICODE);
?>
由于这里周围的人的帮助,它现在就像一种魅力。
但是,我需要一些更复杂的东西:
我有两个通过AJAX导入到php文件的几乎相同的数组。让我们将它们称为“ cleanDataset”和“ rawDataset”。
它们基本上是克隆,但“ rawDataset”是原始副本,而“ cleanDataset”是副本,没有任何html标记和不需要的字符,这些字符我不想成为搜索的一部分。差异很小,但数量众多且无法预测。
因此,我想针对选定的关键字搜索“ cleanDataset”,但我希望相应地过滤“ rawDataset”,并返回到javascript文件。
不幸的是,在上面的代码中,搜索到的数组也是要过滤的数组。
所以基本上,这是我尝试过的,但是没有用:
<?php
$rawDataset = array_filter($_REQUEST['rawDataset'], function ($v){
return filterArray($_REQUEST['keyword'], $_REQUEST['cleanDataset']);
});
function filterArray($needle,$haystack){
$needle = strtolower($needle);
foreach($haystack as $v){
if (stripos($v, $needle) !== false){
return true;
}
};
}
echo json_encode($rawDataset, JSON_UNESCAPED_UNICODE);
?>
当尝试使用console.log()显示输出数组时,出现“ jSon解析错误:无法识别的标记'
任何帮助将不胜感激。谢谢。
编辑:这是我现在在Banzay的帮助下所拥有的东西:
<?php
$rawdataset =[[3,"Yellow","spanish"], [2,"Brown","<span>Toto</span>"], [1,"Green","brown"]];
$cleandataset=[[3,"Yellow","spanish"], [2,"Brown","Toto"], [1,"Green","brown"]];
$rawdataset = array_filter($rawdataset, function ($v,$k) use ($keyword, $cleanDataset){
return filterArray('sPan', $cleanDataset[$k]);
}, ARRAY_FILTER_USE_BOTH);
function filterArray($needle,$haystack){
$needle = strtolower($needle);
foreach($haystack as $k => $v){
if (stripos($v, $needle) !== false) return true;
};
return in_array($needle,$haystack);
}
echo '<pre>'; print_r($rawdataset); echo '</pre>';
?>
这是我收到的错误消息:
Warning: Invalid argument supplied for foreach() in /home/clients/4adf068d83a323d158f798c5347d3685/phenotype/sandrine11/php/filter_data.php on line 16
Warning: in_array() expects parameter 2 to be array, null given in /home/clients/4adf068d83a323d158f798c5347d3685/phenotype/sandrine11/php/filter_data.php on line 22
Warning: Invalid argument supplied for foreach() in /home/clients/4adf068d83a323d158f798c5347d3685/phenotype/sandrine11/php/filter_data.php on line 16
Warning: in_array() expects parameter 2 to be array, null given in /home/clients/4adf068d83a323d158f798c5347d3685/phenotype/sandrine11/php/filter_data.php on line 22
Warning: Invalid argument supplied for foreach() in /home/clients/4adf068d83a323d158f798c5347d3685/phenotype/sandrine11/php/filter_data.php on line 16
Warning: in_array() expects parameter 2 to be array, null given in /home/clients/4adf068d83a323d158f798c5347d3685/phenotype/sandrine11/php/filter_data.php on line 22
Array
(
)
这是我的建议。您可以通过use
关键字将“外部”变量传递给回调函数。
[array_filter()
也可以使用ARRAY_FILTER_USE_BOTH
标志将元素键和值一起传递
这里我简化了代码以使其更具可读性,但从本质上讲,它应该工作并且仍然可以表达我的想法
$keyword = 'abc';
$cleanDataset = ['abcd', 'zabcd', 'awbcd', 'as abc d abc'];
$rawDataset = ['abcd<br>', '<p>zabcd', '<strong>awbcd', 'as <code>abc</code> d abc'];
$rawDataset = array_filter($rawDataset, function ($v, $k) use ($keyword, $cleanDataset) {
return findWord($keyword, $cleanDataset[$k]);
}, ARRAY_FILTER_USE_BOTH);
function findWord($needle,$haystack){
$needle = strtolower($needle);
return (boolean) (stripos($haystack, $needle) !== false);
}