PHP 2B ilişkisel dizi minimum ve maksimum değerlerini almak

6 Cevap php

Ben bu formatta bir dizi var:

Array
(
    [0] => Array
        (
            [id] => 117
            [name] => Networking
            [count] => 16
        )

    [1] => Array
        (
            [id] => 188
            [name] => FTP
            [count] => 23
        )

    [2] => Array
        (
            [id] => 189
            [name] => Internet
            [count] => 48
        )

)

'Saymak' minimum ve maksimum değerleri almak için iyi bir yolu var mı? Ben birkaç döngüler kullanarak bu yapabilirdi ama ben daha iyi bir yolu olabilir düşündüm.

6 Cevap

Başkalarının attılar ne aksine, size min() /max() functions for this problem as these functions do not understand the datastructure (array) which are passed in. These functions only work for scalar array elements. kullanamazsınız


BEGIN EDIT

The reason why the use of min() and max() seem to yield the correct answer is related to type-casting arrays to integers which is an undefined behaviour

The behaviour of converting to integer is undefined for other types. Do not rely on any observed behaviour, as it can change without notice.

Tip-döküm hakkında benim yukarıdaki beyanı yanlış oldu. Aslında min() and max() diziler ile iş yapmak değil şekilde OP çalışması için onlara ihtiyacı var. Kullanırken min() and max() çoklu dizi veya diziler elemanları bir dizi ile soldan sağa doğru eleman eleman karşılaştırılır:

$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)
/*
 * first element compared to first element: 2 == 2
 * second element compared to second element: 4 < 5
 * first array is considered the min and is returned
 */

OP'ın sorun tercüme bu yüzden min() and max() seems to yield the correct result. The arrays' first elements are the id değerlerinin doğrudan kullanımı, bu nedenle min() {[(1 nedenini gösterir )]} will compare them first, incidentally resulting in the correct result because the lowest id [(6)]} {düşük olan biridir ve [(7)]} {yüksek olan bir yüksek olan count.

END EDIT


Doğru yolu bir döngü kullanmak olacaktır.

$a = array(
        array('id' => 117, 'name' => 'Networking', 'count' => 16),
        array('id' => 188, 'name' => 'FTP', 'count' => 23),
        array('id' => 189, 'name' => 'Internet', 'count' => 48)
);
$min = PHP_INT_MAX;
$max = 0;
foreach ($a as $i) {
    $min = min($min, $i['count']);
    $max = max($max, $i['count']);
}

Sen max() ve min() işlevlerini kullanabilirsiniz.

Eğer birkaç döngüler ile ne yaptın? Bir oldukça yeterli :)

  1. $ Dakika ve $ max hem sayısını assing, ilk elemanı alın
  2. kalanı üzerinde yineleme, her $ dk saymak ve $ max karşılaştırmak küçük / büyük, yeni sayım değerini atarsanız

You can use the max/min functions as they will return an array containing the maximum/minimum of each index. Your example should return array(189, 'Networking ', 48) for max. You could then grab the count from that array.


Ben hariç olduğu gibi güncelleyin bu işe yaramazsa. Manuel sayfası örneği yanıltıcı ve yaklaşık örnek maksimum kullanarak doğru sonucu verir ama bu sadece bir tesadüf.

Eğer 2B dizi üzerine max () kullanamazsınız gibi görünüyor. Bu sadece (bir kaç cevapları belirtilen varlık gibi) her indeksin en büyük dizisi, max () döndürür.

Yani:

$count = array();
foreach($arr as $_arr) {
    $count[] = $_arr['count'];
}
var_dump(max($count), min($count));

İstenen sütun dizideki ilk Eğer aşağıdaki tek gömlekleri kullanabilirsiniz:

$max = max(array_map('current', $a));
$min = min(array_map('current', $a));

Bu id min / max bulabilirsiniz