搜索从mySQL返回的对象中的值

时间:2014-03-24 15:58:31

标签: php

这是从mySQL请求返回的对象:

array(6) {
  [0]=> object(stdClass)#48 (2) {
    ["meta_key"]=> string(16) "bp_activity_tagz"
    ["meta_value"]=> string(1) "1"
  }
  [1]=> object(stdClass)#30 (2) {
    ["meta_key"]=> string(14) "favorite_count"
    ["meta_value"]=> string(1) "3"
  }
  [2]=> object(stdClass)#30 (2) {
    ["meta_key"]=> string(14) "bp_activity_tagz"
    ["meta_value"]=> string(1) "4"
  }
  [3]=> object(stdClass)#30 (2) {
    ["meta_key"]=> string(14) "bp_activity_tagz"
    ["meta_value"]=> string(1) "2"
  }
  [4]=> object(stdClass)#30 (2) {
    ["meta_key"]=> string(14) "bp_activity_spam"
    ["meta_value"]=> string(1) "0"
  }
  [5]=> object(stdClass)#30 (2) {
    ["meta_key"]=> string(14) "bp_activity_universal"
    ["meta_value"]=> string(0) ""
  }
}

根据meta_key我需要将每个值放在自己的位置(其中一个meta_key可能根本不存在)

当然foreach可以做到这一点,但我想逐步执行每个功能,切换case不是解决方案。

我更喜欢像array-search这样的函数,但对于像这样的对象。

函数看起来像这样(想象的语言) 如果我的数组是$array

in $array get meta_value for meta_key 'bp_activity_tags'
   if exist do this with meta_value
   else do this
in $array get meta_value for (every) meta_key 'bp_activity_tagz'
   if exist foreach meta_value
   else do this
in $array get meta_value for meta_key 'bp_activity_spam'
   if exist do this
   else do this

这是一个请求此数组的函数:

    $metas = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM {$bp->activity->table_name_meta} WHERE activity_id = %d", $activity_id ) );

    if ( !empty( $metas ) ) {
        $metas = array_map( 'maybe_unserialize', (array) $metas );

        foreach( $metas as $mkey => $mvalue ) {
            wp_cache_set( 'bp_activity_meta_' . $activity_id . '_' . $mkey, $mvalue, 'bp' );
        }
    }
// No result so return false
if ( empty( $metas ) )
    return false;

// Maybe, just maybe... unserialize
$metas = array_map( 'maybe_unserialize', (array) $metas );

// Return first item in array if only 1, else return all metas found
$retval = ( 1 == count( $metas ) ? $metas[0] : $metas );

2 个答案:

答案 0 :(得分:1)

我只是首先重新格式化数组:

$data = array();
foreach ($array as $values) {
    $data[$values->meta_key][] = $values->meta_value;
}

然后只需编写代码:

if (isset($data['bp_activity_tags'])) {
    foo($data['bp_activity_tags']);
}
...

答案 1 :(得分:1)

如果我理解正确,你想拥有一个允许你在一个对象的变量中搜索的功能,如果有匹配,你需要该对象(或它的'值')

这样的事情对你有用吗?

public function findInObjects($array, $objVariable, $needle) {
  foreach($array as $object) {
    if(strpos($object->$objVariable, $needle) !== false) {
        return $object;
    }
  }
  return null;
}

$result = findInObjects($array, 'meta_key', 'favorite_count');
echo $result->meta_value; //should result in "3"