[英]How to use a record from a “echo” of a array to use into another php select
[英]how to select particular record from a php array
我有一個多維數組:
$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函數,但是它只向我展示第一個產品。
您的代碼有一些問題。 我想它需要像這樣:
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];
}
}
過濾數組最簡單,最優雅的方法是結合使用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]> = 90)。 您將一個數字與一個字符串進行比較,並盲目地相信自動轉換將把“ 90%”變成90。也許您想在這里投資一些正則表達式數字提取, 除非您100%確定這些字符串始終具有完全相同的格式...
您可以創建另一個數組來存儲顯示的商人名稱,並檢查是否顯示了當前商人:
$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所說,最好將百分比存儲為整數。
$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
)
)
)
現場示例: 點擊此處
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.