这是从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 );
答案 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"