在PHP对象

时间:2018-02-19 12:44:35

标签: php arrays object

我一直在努力尝试这个并且似乎无法自己解决这个问题。

那么有人可以告诉我我想要的方向吗?

我希望能够破坏包含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";

2 个答案:

答案 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 )