我有一个包含关键字(电子邮件,购物车等)的多维数组,每个关键字都有应用程序的特定列表(EmailAppA ..)及其排名(1,2 ...)。
Array
(
[email] => Array
(
[EmailAppA] => 1
[EmailAppB] => 2
[EmailAppC] => 4
)
[cart] => Array
(
[CartAppA] => 1
[CartAppB] => 2
[MyApp] => 4
)
[reviews] => Array
(
[reviewAppA] => 1
[reviewAppB] => 4
[reviewAppC] => 5
[MyApp] => 7
)
我要实现的是在数组中循环,找到包含应用程序“ MyApp”的所有键,最后删除不包含值“ MyApp”的键。 该数组必须仅包含购物车和评论及其值,电子邮件已删除。
到目前为止,我的代码仍然被卡住:
foreach ($mappedStuff as $keywords=>$value){
foreach ($value as $apps=>$rank){
if($apps != 'MyApp'){
unset($mappedStuff[$keywords];
}
}
}
答案 0 :(得分:1)
您可以使用Click here过滤数组。在其回调函数中,您将寻找“ MyApp”的存在。如果不存在,则回调函数将返回false,因此当前键将被过滤掉。
$filtered = array_filter($array, function($apps)
{
return in_array('MyApp', $apps);
});
我刚刚注意到,您想搜索键存在,而不是值,所以只需将代码更改为:
$filtered = array_filter($array, function($apps)
{
return isset($apps['MyApp']);
});
答案 1 :(得分:1)
您必须修改foreach()
foreach ($mappedStuff as $key=>$value){
if(!in_array('MyApp', array_keys($value))){
unset($mappedStuff[$key]);
}
}
答案 2 :(得分:1)
您可以使用array_walk
array_walk($a, function($v, $k) use (&$a){
if(!array_key_exists('MyApp', $v)) unset($a[$k]);
});
答案 3 :(得分:0)
使用 unset($ mappedStuff [$ key] [$ apps])删除值,
foreach ($mappedStuff as $key => $value) {
foreach ($value as $apps => $rank) {
if($apps == 'MyApp') {
unset($mappedStuff[$key][$apps]);
}
}
}
答案 4 :(得分:0)
您可以做的一件简单的事情是在for
内使用foreach
循环以获取内部值并使用unset
函数。例如:
//This is your array
foreach($yourArray as $item)
{
//These are your categories
for( $i = 0; $i < count($item); $i++ )
{
//for every value of your category's keys, check if they don't match 'MyApp'
if($item[$i] !== "MyApp")
{
//If above statement is true, unset them
unset($item[$i]);
}
}
}
尝试一下,告诉我们:)