我有一个多维数组:
$array=array(
[0]=>array([0]=>"100",
[1]=>"snd",
[2]=>array(['id']="1",['name']=>"xperia")
),
[1]=>array([0]=>"100",
[1]=>"snd",
[2]=>array(['id']="2",['name']=>"xperia")
),
[2]=>array([0]=>"100",
[1]=>"fkt",
[2]=>array(['id']="3",['name']=>"xperia")
),
[3]=>array([0]=>"100",
[1]=>"fkt",
[2]=>array(['id']="4",['name']=>"xperia")
),
[4]=>array([0]=>"90",
[1]=>"snd",
[2]=>array(['id']="5",['name']=>"xperia")
),
[5]=>array([0]=>"90",
[1]=>"fkt",
[2]=>array(['id']="6",['name']=>"xperia")
)
);
数组包含的示例:
$array[0][0]=percentage
$array[0][1]=merchant
$array[0][2]=product info
我希望显示任何一个百分比介于80-100之间的商家。 即使两个商家100%匹配仍然我想要显示一次。
我使用了以下逻辑和代码:
foreach($array as $final_array)
{
if($final_array[0]>=90)
{
echo $final_array[0];
echo $final_array[2]['id'];
echo $final_array[2]['name'];
}
}
如何避免显示双倍的相同商家信息?我也尝试过array_unique函数,但它只向我展示了第一个产品。
答案 0 :(得分:0)
您的代码存在一些问题。我想它需要像那样:
foreach ($array as $final_array)
{
if ($final_array[0]>=80) {
echo $final_array[0];
echo $final_array[2][0];
echo $final_array[2][1];
}
}
如果您需要避免重复这样的事情:
$merchants = array();
foreach ($array as $final_array)
{
$merchant = $final_array[1];
if ( ($final_array[0]>=80) && !in_array($merchant, $merchants) ) {
$merchants[] = $merchant;
echo $final_array[0];
echo $final_array[2][0];
echo $final_array[2][1];
}
}
答案 1 :(得分:0)
过滤数组最简单,最优雅的是使用php的数组函数与回调相结合的强大功能:
<?php
$input = [
["100%", "snd", ['id' =>1, 'name'=>"xperia"]],
["100%", "snd", ['id' =>2, 'name'=>"xperia"]],
[ "90%", "fkt", ['id' =>3, 'name'=>"xperia"]],
[ "80%", "fkt", ['id' =>4, 'name'=>"xperia"]],
[ "70%", "snd", ['id' =>5, 'name'=>"xperia"]],
[ "60%", "fkt", ['id' =>6, 'name'=>"xperia"]],
];
print_r(array_filter($input, function($val){
return ((int)$val[0] >= 80);
}));
注意:我修改了输入值以演示过滤器应用程序。
但正如上面评论中所述:将数字90与字符串“90%”进行比较是一件非常危险的事情($ array [0]&gt; = 90)。您将数字与字符串进行比较,并盲目相信自动转换将“90%”变为90.也许您想在此处投资一些正则表达式数字提取,除非您100%确定那些字符串总是具有那种格式......
答案 2 :(得分:0)
您可以创建另一个数组来存储显示的商家名称,并检查是否显示了当前商家:
$shownMerchants = array();
foreach($array as $final_array)
{
if($final_array[0]>=80 && !in_array($final_array[1], $shownMerchants))
{
echo $final_array[0];
echo $final_array[2][0];
echo $final_array[2][1];
$shownMerchants[] = $final_array[1];
}
}
另外,正如@arkascha所说,最好将百分比存储为整数。
答案 3 :(得分:0)
$arrayInput =array(
0=>array(0=>"100",
1=>"snd",
2=>array('id'=>"1",'name'=>"xperia")
),
1=>array(0=>"100",
1=>"snd",
2=>array('id'=>"2",'name'=>"xperia")
),
2=>array(0=>"100",
1=>"fkt",
2=>array('id'=>"3",'name'=>"xperia")
),
3=>array(0=>"100",
1=>"fkt",
2=>array('id'=>"4",'name'=>"xperia")
),
4=>array(0=>"90",
1=>"snd",
2=>array('id'=>"5",'name'=>"xperia")
),
5=>array(0=>"90",
1=>"fkt",
2=>array('id'=>"6",'name'=>"xperia")
)
);
$Merchants = array();
foreach($arrayInput as $key => $val)
{
$m_name = array_map(function ($ar) {return $ar[1].'-'.$ar[0];}, $Merchants); ///get all the merchant name and percentage from $Merchants new array
if($val[0] >= 80 && !in_array($val[1].'-'.$val[0],$m_name)) /// if % greater than 80 and same merchant with same % not exists than push into array
{
$Merchants[] = $val;
}
}
echo "<pre>"; print_r($Merchants);
这会给你:
Array
(
[0] => Array
(
[0] => 100
[1] => snd
[2] => Array
(
[id] => 1
[name] => xperia
)
)
[1] => Array
(
[0] => 100
[1] => fkt
[2] => Array
(
[id] => 3
[name] => xperia
)
)
[2] => Array
(
[0] => 90
[1] => snd
[2] => Array
(
[id] => 5
[name] => xperia
)
)
[3] => Array
(
[0] => 90
[1] => fkt
[2] => Array
(
[id] => 6
[name] => xperia
)
)
)
现场示例:CLICK HERE