- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我知道关键,现在我需要搜索 5000 多个用户数据库时产生的所有 结果。任何用户可能没有一个或多个位置,由 id
和 name
字段标识。因此,我需要一个数组中的结果,不仅仅是第一个/最后一个,而是所有结果。下面是一个用户示例(实际数组设置,假数据;))
Array
(
[ID] => 2
[user_login] => SomeGuy
[user_pass] => GreatEncryptedPassword
[user_nicename] => Some Guy
[user_email] => someguy@has-email.com
[user_url] => someguy.com
[user_registered] => 2013-04-11 11:18:58
[user_activation_key] =>
[user_status] => 0
[display_name] => Some Guy
[umeta_id] => 31
[user_id] => 2
[meta_key] => facebookmeta
[meta_value] => Array
(
[id] => 1234567890
[name] => Some Guy
[first_name] => Some
[last_name] => Guy
[link] => http://www.facebook.com/someguy
[username] => someguy
[birthday] => 02/21/1983
[location] => Array
(
[id] => 108276092536515 //actual ID, try at facebook.com/108276092536515
[name] => Arnhem, Netherlands
)
[gender] => male
[relationship_status] => In a Relationship
[significant_other] => Array
(
[name] => Some Chick
[id] => 12345678906789
)
[email] => someguy@has-email.com
[timezone] => 2
[locale] => nl_NL
[verified] => 1
[updated_time] => 2013-04-02T09:28:30+0000
)
)
你可以看出,这个人在他的 facebook 数据中有 1 个位置,但其他位置包含相同的 [location] => Array ( [id] => 123 [name] => SomePlace )
例如 [work]
或 [education]
, or, or, or...
我试过像 this 这样的递归函数:
function get_value_by_key( $array, $key ){
foreach( $array as $k => $each ){
if( $k == $key ){
return $each;
}
if( is_array( $each )){
if( $return = get_value_by_key($each,$key)){
return $return;
}
}
}
}
print_r( get_value_by_key( $users, 'location' );
如何修改上述函数以返回位置数组?这个返回包含位置的第一个用户的上述数据,而不是位置本身或它们的数组。
编辑:结果我需要的是这样的:
Array(
[0] => Array(
[id] => 1234567890
[name] => GreatCity, World
)
[1] => Array(
[id] => 2345678901
[name] => SomeCity, Blop
)
[2] => Array(
[id] => 3456789012
[name] => AnotherCity, Boo
)
)
根据答案进行编辑Thomas David Plat 的回答给了我正确的结果,但仍然是一个不太可用的数据结构。如何将结果从结构中取出并放入上面编辑中显示的结构中?
David 回答的结果:
Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[id] => 108276092536515
[name] => Arnhem, Netherlands
)
[1] => Array()
)
)
[1] => Array
(
[0] => Array
(
[0] => Array
(
[id] => 108276092536515
[name] => Arnhem, Netherlands
)
[1] => Array()
)
)
[2] => Array()
[3] => Array()
[4] => Array()
我已经尝试了 array_filter
、array_map
、array_values
和其他变体,如下所示:
$locations = array_map( 'array_filter', find_array_values( $users, 'location' ));
但结构似乎保持...
最佳答案
更新的答案
$matches = array();
function find_array_values($haystack, $needle)
{
global $matches;
$collection = array();
foreach($haystack AS $key => $value)
{
if($key === $needle)
{
$matches[] = $value;
}
else if(is_array($value))
{
find_array_values($value, $needle);
}
}
}
find_array_values($array, 'location');
print_r($matches);
?>
这会起作用,但正如我在评论中所说的那样,这是一种不好的做法,因为它使用了 global 关键字。如果您将此函数作为一个方法实现到一个类中,而不是使用 global 关键字,您可以使用一个类变量,这将是一个很好的解决方案。
旧答案
function find_array_values($haystack, $needle)
{
$collection = array();
foreach($haystack AS $key => $value)
{
if($key === $needle)
{
$collection[] = $value;
}
else if(is_array($value))
{
$collection[] = find_array_values($value, $needle);
}
}
return $collection;
}
echo "<pre>";
print_r(find_array_values($users, 'location'));
echo "</pre>";
给你。只需将一组用户传递给该函数即可。该函数将返回一组位置数组。
只有一个限制。该函数不会搜索位置内的槽位置。
关于php - 使用键从多维数组中获取值(复数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538469/
这个问题在这里已经有了答案: final keyword in method parameters [duplicate] (9 个回答) 关闭 8 年前。 在此示例中,声明 Object fina
我的目标:是通过我的函数更新字段获取选定值并使用函数输出值运行它。 问题:当我从列表中选择值时,它不会触发函数,也不会更新字段。 感谢您的帮助。 HTML 12 14 16 18 20 22 24
我有一本具有这种形式的字典: myDict = {'foo': bar, 'foobar baz': qux} 现在,我想拆分字典键中的空格,使其成为下一个键并获取值(重复)。 myDictRev1
vector a; vector b; int temp_holder; cout > temp_holder) a.push_back(temp_holder); cout > temp_h
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿。当然,我
我正在使用 jquery ui 日期选择器来获取 fromDate 和 toDate 以下是from日期的代码 $("#from_date").datepicker({
我是一名优秀的程序员,十分优秀!