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