php dizisindeki maksimum sayı. PHP 2B ilişkisel dizideki minimum ve maksimum değerleri alın. PHP'de tek boyutlu bir dizinin en büyük ve en küçük değerini bulma

  • 20.06.2020

Bu biçimde bir dizim var:

Dizi (=> Dizi (=> 117 => Ağ Oluşturma => 16) => Dizi (=> 188 => FTP => 23) => Dizi (=> 189 => İnternet => 48))

"Sayım"ın minimum ve maksimum değerlerini almanın iyi bir yolu var mı? Bunu birden fazla döngü kullanarak yapabilirdim, ancak daha iyi bir yol olabileceğini düşündüm.

Diğerlerinden farklı olarak min() / max() fonksiyonlarını bu problem için kullanamazsınız çünkü bu fonksiyonlar kendilerine geçirilen dizileri (dizileri) anlamazlar. Bu işlevler yalnızca skaler dizi öğeleri için çalışır.

BAŞLANGIÇ GÖRÜNTÜSÜ

Min () ve max () kullanmanın doğru cevabı vermesinin nedeni, tanımsız davranış olan tamsayılara tip döküm dizileriyle ilgilidir:

Tamsayıya dönüştürme davranışı diğer türler için tanımsızdır. Uyarı vermeden değişebileceğinden, gözlemlenen herhangi bir davranışa güvenmeyin.

Tip dökümüyle ilgili yukarıdaki ifadem yanlıştı. Aslında min () ve max () diziler üzerinde çalışır, ancak OP'nin çalışması için ihtiyaç duyduğu şekilde değil. Min () ve max () birden çok diziyle veya bir dizi öğesi dizisiyle kullanıldığında, öğeler soldan sağa öğe öğe karşılaştırılır:

$ val = min (dizi (2, 4, 8), dizi (2, 5, 1)); // dizi (2, 4, 8) / * * ilk elemanla karşılaştırıldığında ilk eleman: 2 == 2 * ikinci elemanla karşılaştırıldığında ikinci eleman: 4< 5 * first array is considered the min and is returned */

OP'nin sorununa çevrildiğinde, min () ve max () öğelerinin doğrudan kullanımının neden doğru sonucu verdiği görülüyor. Dizinin ilk öğeleri id'dir, bu nedenle min () ve max () önce bunları karşılaştırın, bu arada, doğru sonuca yol açar, çünkü en düşük id, en düşük sayıya sahip olandır ve en yüksek id, en düşük sayıya sahip olandır. en yüksek sayı.

SON DÜZENLEME

Doğru yol bir döngü kullanmaktır.

$ a = dizi (dizi ("id" => 117, "name" => "Ağ", "count" => 16), dizi ("id" => 188, "name" => "FTP", " sayım "=> 23), dizi (" id "=> 189," ad "=>" İnternet "," sayım "=> 48)); $ dak = PHP_INT_MAX; $ maks = 0; foreach ($ a as $ i) ($ min = min ($ min, $ i ["count"]); $ max = max ($ max, $ i ["count"]);)

max() ve min() fonksiyonlarını kullanabilirsiniz.

Çoklu döngülerle ne yaptınız? Bir tane yeter 🙂

  1. Hem $ min hem de max'i sayarak ilk öğeyi alın
  2. geri kalanını yineleyin, sayacı her $ min ve $ max ile karşılaştırın, daha az / daha fazla ise yeni bir sayım değeri atayın

Her dizinin maksimum/minimumunu içeren bir dizi döndürecekleri için max/min işlevlerini kullanabilirsiniz. Örneğiniz, maks. Sonra bu diziden puanı alabilirsiniz.

Bunu güncellemek, ekarte ettiğim gibi çalışmıyor. Kılavuz sayfası örneği yanıltıcıdır ve örnek, max kullanarak doğru sonucu verir, ancak bu sadece bir tesadüftür.

2B dizide max () kullanamazsınız. Her dizinin max () değerini değil (birden çok yanıtta belirtildiği gibi) yalnızca en büyük diziyi döndürür.

$ sayı = dizi (); foreach ($ dizi olarak $ _arr) ($ sayısı = $ _arr ["sayım"];) var_dump (maks ($ sayısı), min ($ sayısı));

eşdeğeri var mı yerleşik Bunun için işlev? (olasılık olmasa bile test yapmak)

/ ** *, başka bir sütun üzerinde isteğe bağlı seçimle 2B diziden bir sütun alır * * @param $ dizi aArray alınacak * @param $ aColName alınacak sütun adı örn. "O_NAME" * @param $ aColTest (isteğe bağlı) testi çalıştıracak sütunun adı, ör. "O_ID" * @param $ aTest (isteğe bağlı) test için dize ex. "> = 10", "==" ". $ Toto." "" * @Return 1D dizisi yalnızca ayıklanan sütunla * @access public * / function ExtractColFromArray ($ aArray, $ aColName, $ aColTest = "", $ aTest = "") ($ mRes = dizi (); foreach ($ aArray as $ satır) (if (($ aColTest == "") || (eval ("dönüş". $ satır [$ aColTest]. $ aTest) . ";"))) ($ mRes = $ satır [$ aColName];)) return $ mRes;) // ExtractColFromArray

Diziler, bilgi depolamanın uygun yapılandırılmış yollarından biridir. Böyle bir dizinin her elemanının kendi yeri, kendi anahtarı ve değeri vardır. Dizilerin içeriği, sayıların tabanı, adlar veya basit sayısal değerler gibi farklı olabilir. Sayıdan bahsetmişken, örneğin maksimum veya minimum değeri görüntülemek gibi çeşitli görevlerle karşılaşabiliriz. Bugün bunun farklı programlama dillerinde nasıl çözüldüğünden bahsedeceğiz.

PHP'de tek boyutlu bir dizinin en büyük ve en küçük değerini bulma

Tüm diziler yapılarında farklılık gösterir. Biri anahtar içermeyen iki basit tek boyutlu diziyi düşünün:

$ dizim = dizi (22, 24, 37, 74, 23, 2, 10);

ve bir öncekiyle aynı, ancak anahtarlarla:

$ dizim = dizi (1 => 22, 2 => 24, 3 => 37, 4 => 74, 5 => 23, 6 => 2, 7 => 10);

Bu dizinin maksimum ve minimum değerlerini göstermeye çalışalım. Bunu yapmak için standart işlevleri kullanacağız “ maksimum" ve " dk" sırasıyla:

Yankı max ($ my_array); // 74 echo min ($ my_array) yazdır; // Çıktı 2

İkinci diziye daha yakından bakarsak, sonuç olarak maksimum veya minimum değerlerin anahtarını alabiliriz.

Bir dizi örneği

$ dizim = dizi (1 => 22, 2 => 24, 3 => 37, 4 => 74, 5 => 23, 6 => 2, 7 => 10);

Bunun gibi görünecek:

$ maks = dizi_anahtarları ($ dizim, maks ($ dizim)); $ maks = $ maks; // Maksimum değer anahtarı $ min = dizi_anahtarları ($ dizim, min ($ dizim)); $ dak = $ dak; // Minimum değer tuşu echo $ max; // Maksimum değerin sonucunu göster

Buna göre, maksimum değer için anahtar "4" ve minimum değer "6" dır.

PHP'de çok boyutlu bir dizinin en büyük ve en küçük değerini bulma

Çok boyutlu diziler iç içe geçmeleriyle ayırt edilirler. Örneğin, iki boyutlu bir dizi, anahtarlar olmadan şöyle görünür:

$ dizim = dizi (dizi (22, 24, 37), dizi (74, 23, 2), dizi (10));

Ve buna göre, bazı tuşlarla:

$ dizim = dizi (dizi (1 => 22, 2 => 24, 3 => 37), dizi (4 => 74, 5 => 23, 6 => 2), dizi (7 => 10));

Bu durumda, maksimum ve minimum değerleri bulmak biraz zor, ama aynı derecede gerçekçi.

İlk olarak, burada maksimum ve minimumu bulmak için diziyi tek boyutlu hale getiriyoruz:

$ out_array = dizi (); foreach ($ alt_dizi olarak $ my_array) ($ out_array = array_merge ($ out_array, $ sub_array);)

Tasarım, yukarıdaki her iki seçenek için de çalışır. Ardından, tek boyutlu bir dizi örneğini izleyerek ihtiyacımız olan verileri görüntüleyeceğiz:

Yankı max ($ out_array); // 74 echo min ($ out_array) yazdır; // Çıktı 2

Bonus olarak, işte başka bir popüler iki boyutlu dizi örneği:

$ my_array = dizi (dizi ("id" => "1", "tarih" => "2018-03-19", "fiyat" => "5",), dizi ("id" => "2" , "date" => "2018-03-19", "price" => "50",), array ("id" => "3", "date" => "2018-03-19", " fiyat "=>" 25 ",));

Popülerlik derken içeriği değil, yapısının bir örneğini kastediyorum. Diyelim ki burada sadece "fiyat" tuşlarının maksimum ve minimum değerlerini yazdırmanız gerekiyor.

Bu durumda ihtiyacınız olan ilk şey, yalnızca bu verilerle yeni bir dizi elde etmektir:

$ sayılar = dizi_sütun ($ dizim, "fiyat");

Yankı min ($ sayılar); // max 5 echo ($ sayı) yazdır; // Çıkış 50

Bu, PHP'deki dizilerle çalışmayı tamamlar. Aniden dizinizin yapısı farklıysa ve nasıl işleneceğini bilmiyorsanız - yorumlarda uygun soruyu sorun, size yardımcı olmaya çalışacağım.

JavaScript'te tek boyutlu bir dizinin en büyük ve en küçük değerini bulma

PHP'den farklı olarak, JavaScript dizileri çok daha basittir ve basit bir tek boyutlu dizi şöyle görünür:

Var my_array =;

Burada herhangi bir endeks belirtilmemiştir. Bu dizideki maksimum ve minimum değerleri bulmak için basit fonksiyonlarımızdan iki tanesini yazacağız:

işlev arrayMax (dizi) (dönüş dizi.reduce (işlev (a, b) (dönüş Math.max (a, b);));) işlev arrayMin (dizi) (dönüş dizisi.reduce (işlev (a, b) ( dönüş Math.min (a, b);)));)

ihtiyacımız olan değerleri bulmak için kullanılır. Kullanımı da basittir:

Uyarı (arrayMax (my_array)); // Çıktı 74 uyarısı (arrayMin (my_array)); // Çıktı 2

Bu durumda ekranda "2" ve "74" sayıları dizinin minimum ve maksimum değerleri olarak görüntülenecektir.

JavaScript'te çok boyutlu bir dizinin en büyük ve en küçük değerini bulma

JavaScript'teki çok boyutlu diziler de aynı derecede basittir ve şöyle görünürler:

Var my_array = [,,];

Burada maksimum ve minimumu bulmaya çalışalım. Başlangıç ​​olarak, tanıdık şemamıza göre bu diziyi tek boyutlu olarak temsil edeceğimiz bir fonksiyon yazacağız:

Var out_array =; my_array.forEach (işlev (v) (Array.prototype.push.apply (out_array, v);));

Ve nesneyi kullanarak " Matematik"İhtiyacımız olan değerleri alıyoruz:

Var min = Math.min.apply (null, out_array); // 2 var max al = Math.max.apply (null, out_array); // 74 uyarı al (maks); // 74'ü ekranda göster

Aslında, nesne yerine " Matematik»Varyantta kullanılan fonksiyonlarımızı tek boyutlu bir dizi ile kullanabilirsiniz, ancak herhangi bir sorunun birkaç şekilde çözülebileceğini anlamanız için - burada biraz farklı bir çözüm verdim.

Eh, geleneğe göre - küçük bir bonus. Aşağıdaki yapıya sahip başka bir çok boyutlu diziyi düşünün:

Var my_array = [["Bir", "2018-03-19", 5], ["İki", "2018-03-19", 50], ["Üç", "2018-03-19", 25 ],];

Gördüğümüz gibi her bir dizideki sayısal değerler üçüncü sırada yer almaktadır. Biraz kod yazalım ve sadece bu verilerden karşılık gelen değerleri alalım:

Var min = + Sonsuz; var max = -Sonsuz; my_array.forEach (işlev (öğe) (eğer (+ öğe)< min) { min =+ item; // Ищем минимальное значение } }); my_array.forEach(function(item) { if(+item >maks) (maks = + öğe; // Maksimum değer aranıyor))); uyarı (min + "" + maks); // Sonucu ekranda göster

Bu kadar. Projeye destek olmayı unutmayın. Önünüzde sizi birçok ilginç şey bekliyor!

(PHP 4, PHP 5, PHP 7)

dk - En küçük değeri bulur

Açıklama

Argüman olarak yalnızca bir tanesi iletilirse - bir sayı dizisi, dk () en küçüğünü döndürür. İlk argüman bir tamsayı veya bir kayan nokta ise, en az bir tane daha olmalıdır. Bu durumda, fonksiyon dk () en küçüğünü döndürür.

Yorum Yap:

Farklı türlerdeki değerler, standart karşılaştırma kuralları kullanılarak karşılaştırılır. Örneğin, sayısal olmayan bir dize ( sicim) bir tamsayı ile karşılaştıracaktır ( tam sayı) eşitmiş gibi 0 , ancak birkaç satır ( sicim) alfabetik olarak karşılaştırılacaktır. Dönüş değeri, dönüşüm olmadan değişkenin orijinal türünü koruyacaktır.

Dönüş Değerleri

İşlev dk () standart karşılaştırma kurallarına göre "en küçük" olarak kabul edilen parametrenin değerini döndürür. Farklı türlerdeki birkaç değer eşitse (örn. 0 ve "ABC"), ilki iade edilecektir.

Örnekleri

Örnek # 1 Kullanım örneği dk ()

yankı min (2, 3, 1, 6, 7); // 1
yankı min (dizi (2, 4, 5)); // 2

// "merhaba" dizesi, bir int ile karşılaştırıldığında 0 olarak kabul edilir
// Her iki değer de eşit olduğu için parametrelerin sırası sonucu belirler
yankı dk (0, "merhaba"); // 0
yankı min ("merhaba", 0); // Merhaba

// Burada -1'i karşılaştırıyoruz< 0, поэтому -1 является наименьшим значением
yankı min ("merhaba", - 1); // -1

// Farklı uzunluktaki dizileri karşılaştırırken min, daha kısa olanı döndürür
$ val = min (dizi (2, 2, 2), dizi (1, 1, 1, 1)); // dizi (2, 2, 2)

// Aynı uzunluktaki birkaç dizi soldan sağa karşılaştırılır
// bu örnek için: 2 == 2, ancak 4< 5
$ val = min (dizi (2, 4, 8), dizi (2, 5, 1)); // dizi (2, 4, 8)

// Bir dizi ve dizi olmayanlar karşılaştırılırsa, dizi asla döndürülmez
// diziler diğer tüm değerlerden daha büyük kabul edildiğinden
$ val = min ("string", dizi (2, 5, 7), 42); // sicim

// Bir argüman NULL veya boole ise, geri kalanıyla karşılaştırılacaktır.
// YANLIŞ kuralını kullanarak< TRUE, учитывая остальные типы аргументов
// Yukarıdaki örnekte -10 ve 10 DOĞRU olarak kabul edilir
$ değer = min (- 10, YANLIŞ, 10); // YANLIŞ
$ değer = min (- 10, NULL, 10); // BOŞ

// Öte yandan, 0 YANLIŞ olarak kabul edilir, bu nedenle DOĞRU'dan "daha az" olur
$ değer = dak (0, DOĞRU); // 0
?>