0

ARRAY()我有这个函数/方法用于在使用中过滤掉单词的黑名单,array_filter但我需要在下面的代码中做一些类似于我的对象的事情......

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;
    });
}

所以我很好奇是否有像array_filterARRAYS 那样过滤对象的类似函数?

最终我的目标是能够通过一个函数传递数百个 JSON 对象,并且能够过滤掉与用户名中的一组单词匹配的对象,过滤掉与语言匹配的对象,并过滤掉与位置或位置匹配的对象。时区

4

2 回答 2

2

除非你想要一个解决方案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获取文档

于 2012-04-21T01:51:59.720 回答
1

如果我正确理解所有内容,我认为您甚至不需要针对对象的新 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);
于 2012-04-21T01:52:56.863 回答