Php 如何过滤对象数组?

Php 如何过滤对象数组?,php,arrays,Php,Arrays,我有一个对象数组(如下所示),我想编写一个函数,返回相同的数组,但删除满足条件的“对象” 该职能将: 1-检查索引是否存在 2-如果存在,检查所需的值,如果对象的索引等于该值,则删除整个对象 例如: Array ( [course] => Array ( [0] => stdClass Object ( [name] => Programmation

我有一个对象数组(如下所示),我想编写一个函数,返回相同的数组,但删除满足条件的“对象”

该职能将:

1-检查索引是否存在 2-如果存在,检查所需的值,如果对象的索引等于该值,则删除整个对象

例如:

    Array
(
    [course] => Array
        (
            [0] => stdClass Object
                (
                    [name] => Programmation Web
                    [description] => 
                    [public] => 0
                    [requests] => 0
                    [id] => 245
                    [members] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [id] => 11
                                    [name] => Robert Smith
                                )

                        )

                    [projects] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [id] => 1923
                                    [title] => Sans titre (1)
                                    [type] => portfolio
                                )

                            )

                    [project_count] => 1
                    [admins] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [member] => 11
                                    [firstname] => Robert
                                    [lastname] => Smith
                                )

                        )

                    [topic_name] => Le PHP
                    [activites] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [topic_name] => 
                                    [topic_id] => 42
                                    [post_parent] => 107
                                    [post_body] => Oui moi aussi je me demande ça.
                                    [post_id] => 109
                                )

                        )

                    [forums] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [forum_name] => Discussion générale
                                    [forum_id] => 101
                                )

                        )

                )

            [1] => stdClass Object
                (
                    [name] => Les bases de données
                    [description] => 
                    [public] => 0
                    [jointype] => controlled
                    [grouptype] => course
                    [membershiptype] => admin
                    [topic_name] => Difficulté
                    [activites] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [topic_name] => 
                                    [topic_id] => 44
                                    [post_parent] => 111
                                    [post_body] => Ouah!
                                    [post_id] => 112
                                )

                        )

                    [forums] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [forum_name] => Le MySQL
                                    [forum_id] => 103
                                )

                        )

                )

        )

)
如果有一个对象的admins->member值等于11,请删除该对象并返回不包含该对象的数组。因此,返回的数组将是:

        Array
(
    [course] => Array
        (
            [0] => stdClass Object
                (
                    [name] => Programmation Web
                    [description] => 
                    [public] => 0
                    [requests] => 0
                    [id] => 245
                    [members] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [id] => 11
                                    [name] => Robert Smith (smithrobert)
                                )

                        )

                    [projects] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [id] => 1923
                                    [title] => Sans titre (1)
                                    [type] => portfolio
                                )

                            )

                    [project_count] => 1
                    [admins] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [member] => 11
                                    [firstname] => Robert
                                    [lastname] => Smith
                                )

                        )

                    [topic_name] => Le PHP
                    [activites] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [topic_name] => 
                                    [topic_id] => 42
                                    [post_parent] => 107
                                    [post_body] => Oui moi aussi je me demande ça.
                                    [post_id] => 109
                                )

                        )

                    [forums] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [forum_name] => Discussion générale
                                    [forum_id] => 101
                                )

                        )

                )

        )

)

我该怎么做呢?

您可以使用带有自定义回调的
array\u filter

function filter_callback($element) {
  if (isset($element->foo) && $element->foo == 'some_value') {
    return TRUE;
  }
  return FALSE;
}

$arr = array_filter($arr, 'filter_callback');

要筛选数组吗?使用


提供另一种方法:

public function getArrayFiltered($aFilterKey, $aFilterValue, $array) {
    $filtered_array = array();
    foreach ($array as $value) {
        if (isset($value->$aFilterKey)) {
            if ($value->$aFilterKey == $aFilterValue) {
                $filtered_array[] = $value;
            }
        }
    }

    return $filtered_array;
}

使用用例提供另一种方法: 使用的函数&

你可以在这里找到它:

看一看。重复()嗨!谢谢你简洁的回答!它看起来应该能工作,但它不能工作$在我通过你的回调函数传递了$array之后,新的_数组和$array是一样的。真的很奇怪,它对我起作用了。通过查看您的数据结构,我不明白为什么它不会…:数组以索引“course”开头,这就是它不工作的原因吗?
public function getArrayFiltered($aFilterKey, $aFilterValue, $array) {
    $filtered_array = array();
    foreach ($array as $value) {
        if (isset($value->$aFilterKey)) {
            if ($value->$aFilterKey == $aFilterValue) {
                $filtered_array[] = $value;
            }
        }
    }

    return $filtered_array;
}
$params = [
    "nom" => 'titof',
    "prenom" => 'edoe',
    "age" => '25'
    ];

$data = [
    0 => [
        'nom' => 'john',
        'prenom' => 'doe',
        'age' => '25'
        ],
    1 => [
        'nom' => 'lola',
        'prenom' => 'la grandi',
        'age' => '72'
        ],
    2 => [
        'nom' => 'michael',
        'prenom' => 'Pamal',
        'age' => '25'
        ]
    ];

function getFilteredArray($params, $data) {
   $filtredArray = [];
   foreach($params as $key => $value) {
       foreach($data as $index => $item) {
           if(array_key_exists($key, $item) && in_array($value, $params)) {
               if($item[$key] == $value ){
                   $filtredArray[$index] = $item;
               } else {
                   continue;
               }
           }
       }
   }
   return $filtredArray;
}