簡體   English   中英

如何從php數組中選擇特定記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM