我有这个函数/方法,用于使用 array_filter
过滤掉ARRAY()
中的单词黑名单,但我需要在下面的代码中做一些类似于我的对象的事情......
JSON 对象
// Get JSON Object
$obj = json_decode($out);
// Iterate JSON Object
foreach($obj as $index => $user) {
echo $user->id;
echo $user->screen_name;
echo $user->language;
echo $user->location;
echo $user->time_zone;
echo $last_status_date;
echo $user->status->text;
// Filter out Objects that match the Blacklist
// insert remainning into database here
}
我当前的黑名单过滤功能
public function blacklistFilter($raw_array){
//$data1 = array('Phillyfreelance' , 'PhillyWebJobs', 'web2project', 'cleanname');
$data1 = array_filter($data1, function($el) {
$bad_words = array('job', 'freelance', 'project', 'gig', 'word', 'news', 'studio');
$word_okay = true;
foreach ( $bad_words as $bad_word ) {
if ( stripos($el, $bad_word) !== FALSE ) {
$word_okay = false;
break;
}
}
return $word_okay;
});
}
所以我很好奇是否有一个 simialr 函数来过滤对象,就像array_filter
ARRAY 一样?
最终,我的目标是能够通过一个函数传递数百个JSON对象,并能够过滤掉与用户名中的一组单词匹配的对象,过滤掉与语言匹配的对象,并过滤出与位置或时区匹配的对象。
除非你想要一个解决方案specifically for object
如果没有,你不需要它
您正在呼叫
$obj = json_decode($out);
这就是为什么你会得到一个对象..如果你打电话
$obj = json_decode($out,true);
当第二个参数TRUE
时,json_decode
返回objects will be converted into associative arrays.
响应将是一个数组,请参阅 http://php.net/manual/en/function.json-decode.php
如果我正确理解了所有内容,我认为您甚至不需要为对象使用新的 PHP 函数,而且您的过滤器似乎过于复杂。
$obj = json_decode($out);
$bad_words = array('job', 'freelance', 'project', 'gig', 'word', 'news', 'studio');
foreach((array)$obj as $key => $val)
{
$word_okay = !in_array($val, $bad_words);
if($word_okay){
echo "{$val} is good";
}
else{
echo "{$val} is bad";
}
}
我假设您希望能够在需要时将对象视为数组,但仍将其保留为对象。否则,这会将您的 JSON 对象初始化为数组:
$obj = json_decode($out, true);