Php 在多维数组中查找值
我有一个多维数组:Php 在多维数组中查找值,php,Php,我有一个多维数组: array ( array ( "username" => "foo", "favoriteGame" => "Mario" ) array ( "username" => "bar", "favoriteGame" => "Mario" ) array ( "username"
array (
array (
"username" => "foo",
"favoriteGame" => "Mario"
)
array (
"username" => "bar",
"favoriteGame" => "Mario"
)
array (
"username" => "xyz",
"favoriteGame" => "Zelda"
)
)
如何以最简单的方式获取喜欢玩的人的用户名(例如Mario)
编辑:
我的错:忘记明确提到“favoriteGame”值是动态的,我无法提前知道它是哪一个
我的解决方案:
foreach($users as $key => $value)
{
if(!isset($$value['favoriteGame']))
{
$$value['favoriteGame'] = array();
}
array_push($$value['favoriteGame'], $value['username']);
}
迭代每个子数组并找到它的favoriteGame值。
如果还没有数组$favoriteGame,请创建它。
将实际子数组的用户名值推送到$favoriteGame数组
感谢您的回复,我只是无法正确表达这个问题。如果您更经常地使用这个,请将数据结构转换为类似的内容
function getUsernamesByFavoriteGame($data, $game) {
$usernames = array();
foreach($data as $arr) {
if ($arr['favoriteGame'] == $game) {
$usernames[] = $arr['username'];
}
}
return $usernames;
}
array(
"Mario" => array(
"0":"foo",
"1":"xyz"
)
"Zelda" => array(
"0":"pqr",
"1":"abc"
)
)
这将直接为您提供最喜爱游戏的用户名列表
$arr[$favGame]
如果您无法更改数据结构,则按照tigrang的建议进行操作。我将使用
阵列过滤器
。如果您有PHP5.3或更高版本,您可以这样做:
$favorite = "Mario";
$filter = function($player) use($favorite) { return $player['favoriteGame'] == $favorite; };
$filtered = array_filter($players, $filter);
对于较旧的版本,这将有点不同,因为您将无法使用lambda函数。我认为您应该实现一个自定义多维搜索函数。
看一看
下面是您将如何使用它 代码| 输出
Array
(
[a] => A
[b] => B
[c] => C
[f] => D
[h] => E
[i] => F
[k] => G
[l] => H
)
你说的动态是什么意思?如何动态设置?此数组基于用户输入。所以可能是马里奥,塞尔达,甚至是死亡空间。我想显示一个列表,其中包含玩家一起输入的值(当然要删除副本)。而foreach“favoriteGame”则是作为“favoriteGame”输入的用户列表。+1我发现处理多维数组时,
array\u filter
更容易理解
$favorite = "Mario";
$filter = function($player) use($favorite) { return $player['favoriteGame'] == $favorite; };
$filtered = array_filter($players, $filter);
function search($array, $key, $value){
$results = array();
if (is_array($array))
{
if (isset($array[$key]) && $array[$key] == $value)
$results[] = $array;
foreach ($array as $subarray)
$results = array_merge($results, search($subarray, $key, $value));
}
return $results;
}
$arr = array (
array (
"username" => "foo",
"favoriteGame" => "Mario"
),
array (
"username" => "bar",
"favoriteGame" => "Mario"
),
array (
"username" => "xyz",
"favoriteGame" => "Zelda"
)
);
print_r(search($arr, 'favoriteGame', 'Mario'));
//OUTPUT
Array (
[0] => Array (
[username] => foo
[favoriteGame] => Mario
)
[1] => Array (
[username] => bar
[favoriteGame] => Mario
)
)
$array = array( 'a' => 'A',
'b'=>'B',
'c'=>'C',
'd'=>array(
'e'=>array(
'f'=>'D'
),
'g'=>array(
'h'=>'E'
)
),
'i'=>'F',
'j'=>array(
'k'=>'G'
),
'l'=>'H'
);
$new_array = array();
foreach($array as $k1=>$v1){
if(is_array($v1)){
$new_array = parseArray($new_array, $k1, $v1);
}else{
$new_array = array_merge($new_array, array($k1=>$v1));
}
}
function parseArray($new_array, $key, $val){
if(is_array($val)){
foreach($val as $k2=>$v2){
if(is_array($v2)){
$new_array = parseArray($new_array, $k2, $v2);
}else{
$new_array = array_merge($new_array, array($k2=>$v2));
}
}
}else{
$new_array = array_merge($new_array, array($key=>$val));
}
return $new_array;
}
Array
(
[a] => A
[b] => B
[c] => C
[f] => D
[h] => E
[i] => F
[k] => G
[l] => H
)