在laravel中过滤数组的“最大计数”

时间:2019-11-28 13:03:52

标签: php arrays laravel

我在Laravel中有一个数组。我想在索引页面上显示此数组的一些值。

我的数组:

$product = [
    '0' => array(
     'name' => 'product1',
     'count' => '30'
),
    '1' => array(
     'name' => 'product2',
     'count' => '2'
),
    '2' => array(
     'name' => 'product3',
     'count' => '5'
),
    '3' => array(
     'name' => 'product4',
     'count' => '33'
),
    '4' => array(
     'name' => 'product5',
     'count' => '30'
),
    '5' => array(
     'name' => 'product6',
     'count' => '29'
)]; 

我想从最高数量到最低数量显示,并将其限制为4个计数。

像这样

<h2>product4</h2>
<p>33</p>
<hr>

<h2>product1</h2>
<p>30</p>
<hr>

<h2>product5</h2>
<p>30</p>
<hr>

<h2>product6</h2>
<p>29</p>
<hr>

7 个答案:

答案 0 :(得分:3)

尝试

 $sortedarray = collect($product)->sortBy('count')->reverse()->take(4)->toArray();

答案 1 :(得分:2)

排序的数组推入foreach循环:

public function getSortedProducts(){

    $product = [
        '0' => array(
         'name' => 'product1',
         'count' => '30'
    ),
        '1' => array(
         'name' => 'product2',
         'count' => '2'
    ),
        '2' => array(
         'name' => 'product3',
         'count' => '5'
    ),
        '3' => array(
         'name' => 'product4',
         'count' => '33'
    ),
        '4' => array(
         'name' => 'product5',
         'count' => '30'
    ),
        '5' => array(
         'name' => 'product6',
         'count' => '29'
    )]; 

    array_multisort(array_column($product, 'count'), SORT_DESC, $product);

    return view('your_blade_name',compact('product'));
}

刀片:

@foreach($product as $row)
        @if($loop->iteration > 5) // or other logic
            @break
        @endif
    <h3>{{ $row['name'] }}</h3>
    <p>{{ $row['count'] }}</p>
    <hr> 
@endforeach

答案 2 :(得分:1)

尝试使用array_multisortdocumentation

array_multisort(array_column($product, 'count'), SORT_DESC, $product);
echo '<pre>';
print_r($product);
exit;

Check example

答案 3 :(得分:0)

使用 usort 功能

function sortByCount($a, $b) {
   return $b['count'] - $a['count'];
}
usort($product,'sortByCount');
print_r($product);

foreach($product as $k => $val){
   if($k <= 3){
      echo "Your HTML";
      echo '<br/>';
   }

}

答案 4 :(得分:0)

尝试一下

array_multisort

array_multisort(array_column($product, 'count'), SORT_DESC, $product);
echo '<pre>';
for ($i=0; $i <4 ; $i++) { 
   print_r($product[$i]);
}

exit;

引用链接 here

答案 5 :(得分:0)

您可以尝试以下代码:

$sorted = collect($product)->sortByDesc('count')->toArray();  // for sort array
$output = array_slice($sorted, 0, 4);  // for return first four indexs 

答案 6 :(得分:-1)

使用 array_multisort

 f = open("56ad62-json.log", encoding="utf-8")
 qq=f.readline() 

 print(qq)                          
 {"log":\"message\": \"\\u0410\\u0432\\u0442\\u043e\\u0440\\u0438\\u0437\\u0430\\u0446\\u0438\\u044f \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\"}

(qq.encode().decode("unicode-escape").encode().decode("unicode-escape")) 
# '{"log":"message": "Авторизация пользователя"}\n'