我一直在努力尝试这个并且似乎无法自己解决这个问题。
那么有人可以告诉我我想要的方向吗?
我希望能够破坏包含string
- grade_id
的对象项。
我已尝试使用array_filter()
等来获取所有内容。但似乎没有返回正确的值。
array_keys()
没有带回任何东西来尝试将array_keys与preg_match
匹配。
我只是在寻找一些指导,你不必给我一个完整的答案,只是朝着正确的方向指出。
meeting Object
(
[errors] => 0
[id] => 1
[school_id] => 1
[staff_id] => 2
[grade_id] => 85
[grade_id_2] => 0
[grade_id_3] => 0
[grade_id_4] => 0
[grade_id_5] => 0
[grade_id_6] => 0
[grade_id_7] => 0
[grade_id_8] => 0
[grade_id_9] => 0
[grade_id_10] => 0
[inserted] => 2018-02-19 11:46:13
[updated] => 2018-02-19 12:00:31
)
我正在寻找的结果是:(我想找到一种不使用循环的方式“如果可能的话”)
$grade_ids = "85";
答案 0 :(得分:1)
如果将对象转换为数组,则可以执行此操作:
$array = (array)$object;
/* find keys in array that contain 'grade_id' */
$keys = preg_grep('/grade_id/', array_keys($array));
/* discard other array elements */
$filtered = array_intersect_key($array, array_flip($keys));
$result = implode(',', $filtered);
答案 1 :(得分:0)
您可以使用array_walk_recursive(),我尝试使用此代码:
$var = array('meeting'=> array("errors" => 0,
"id" => 1,
"school_id" => 1,
"staff_id" => 2,
"grade_id" => 85,
"grade_id_2" => 0,
"grade_id_3" => 0,
"grade_id_4" => 0,
"grade_id_5" => 0,
"grade_id_6" => 0,
"grade_id_7" => 0,
"grade_id_8" => 0,
"grade_id_9" => 0,
"grade_id_10" => 0,
"inserted" => "2018-02-19 11:46:13",
"updated" => "2018-02-19 12:00:31"));
$uniques = array();
array_walk_recursive($var, function($val, $key) use (&$uniques){
$i=2;
if($key == 'grade_id') {
$uniques[] = $val;
} if($key == 'grade_id_'.$i) {
$uniques[] = $val;
}
$i++;
});
$uniques = array_unique($uniques);
print_r($uniques);
,输出为:
Array ( [0] => 85 [1] => 0 )