Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobieranie największej wartości z tablicy wielowymiarowej według danych z innej tablicy
Forum PHP.pl > Forum > Przedszkole
thomson89
Witam!

Mam dwie tablice:

Kod
Array (
[1] => Array ( [nazwa] => Kurier DPD [koszt] => 40.00 [opis] => Wysyłka kurierem DPD. )
[5] => Array ( [nazwa] => Poczta Polska [koszt] => 12.00 [opis] => Paczka priorytetowa )
[3] => Array ( [nazwa] => Poczta Polska [koszt] => 15.00 [opis] => List priorytetowy )
[4] => Array ( [nazwa] => Poczta Polska [koszt] => 7.00 [opis] => List priorytetowy )
)


Kod
Array ( [0] => Kurier DPD [1] => Poczta Polska )


Klucze w tablicy pierwszej to id rekordów (w bazie danych).

Muszę teraz za pomocą drugiej tablicy (tablica "typów") zostawić tylko te dwa typy w pierwszej tablicy, ale musi zostać typ z największą ceną.

Ciężko to wytłumaczyć, ale muszę uzyskać coś takiego:
Kod
Array (
[1] => Array ( [nazwa] => Kurier DPD [koszt] => 40.00 [opis] => Wysyłka kurierem DPD. )
[3] => Array ( [nazwa] => Poczta Polska [koszt] => 15.00 [opis] => List priorytetowy )
)


Przez to, że jedna tablica jest wielowymiarowa nie potrafię sobie nawet rozplanować tego, jak to wykonać.

Proszę o pomoc!

melkorm
Przeliteruj po tej drugiej tablicy i szukaj w tej pierwszej największej wartości, tyle, dwa foreach'e winksmiley.jpg (zagnieżdżone)
thomson89
Dzięki za pomoc.

A teraz mam pytanie: czy da się poniższy kod usprawnić? Nie jestem dobrym php'owcem i myślę że na pewno jest jakieś rozwiązanie.

Zadaniem poniższego kodu jest wybranie opcji przesyłek według tego co mają w ustawieniach produkty i odpowiednie posegregowanie i przesortowanie tego aby znaleźć opcje z największą ceną wśród typów.

Dzięki, ~melkorm - skleciłem takie coś jak widać na końcu (ostatni foreach).

  1. $opcjeP_tabelkaid = Array();
  2. $nazwy_wszystkie = Array();
  3.  
  4. $query = 'SELECT * FROM rodzaje_przesylek';
  5. $result = mysql_query($query);
  6.  
  7. while($tableWithResult = mysql_fetch_assoc($result))
  8. {
  9. $opcje_przesylki[$tableWithResult['id']]['nazwa'] = $tableWithResult['nazwa'];
  10. $opcje_przesylki[$tableWithResult['id']]['koszt'] = $tableWithResult['koszt'];
  11. $opcje_przesylki[$tableWithResult['id']]['opis'] = $tableWithResult['opis'];
  12. }
  13.  
  14. foreach($_SESSION['koszyk'] as $key => $value)
  15. {
  16. $query = 'SELECT * FROM `produkty` WHERE id = '.$key;
  17. $result = mysql_query($query);
  18. $tableWithResult = mysql_fetch_assoc($result);
  19.  
  20. $opcjeP = explode(', ', $tableWithResult['przesylka']);
  21. foreach($opcjeP as $key => $value)
  22. {
  23. if($value != '')
  24. {
  25. if(array_search($value, $opcjeP_tabelkaid) === false)
  26. $opcjeP_tabelkaid[] = $value;
  27. }
  28. }
  29. }
  30.  
  31. foreach($opcjeP_tabelkaid as $key => $value)
  32. {
  33. if(array_key_exists($value, $opcje_przesylki))
  34. {
  35. $opcje_ostateczne[$value] = $opcje_przesylki[$value];
  36. }
  37. }
  38.  
  39. foreach($opcje_ostateczne as $key => $value)
  40. {
  41. $nazwy_wszystkie[] = $value['nazwa'];
  42. }
  43. $nazwy_wszystkie = array_unique($nazwy_wszystkie);
  44.  
  45. foreach($nazwy_wszystkie as $key => $value)
  46. {
  47. foreach($opcje_ostateczne as $key_ => $value_)
  48. {
  49. if(array_search($value, $value_) !== false)
  50. {
  51. if($ostatecznie[$value]['koszt'] < $value_['koszt'])
  52. {
  53. $ostatecznie[$value]['koszt'] = $value_['koszt'];
  54. $ostatecznie[$value]['opis'] = $value_['opis'];
  55. $ostatecznie[$value]['id'] = $key_;
  56. $ostatecznie[$value]['nazwa'] = $value_['nazwa'];
  57. }
  58. }
  59.  
  60. }
  61. }
kefirek
Cytat(thomson89 @ 2.11.2010, 17:42:12 ) *
Witam!

Mam dwie tablice:

Kod
Array (
[1] => Array ( [nazwa] => Kurier DPD [koszt] => 40.00 [opis] => Wysyłka kurierem DPD. )
[5] => Array ( [nazwa] => Poczta Polska [koszt] => 12.00 [opis] => Paczka priorytetowa )
[3] => Array ( [nazwa] => Poczta Polska [koszt] => 15.00 [opis] => List priorytetowy )
[4] => Array ( [nazwa] => Poczta Polska [koszt] => 7.00 [opis] => List priorytetowy )
)


Kod
Array ( [0] => Kurier DPD [1] => Poczta Polska )


Klucze w tablicy pierwszej to id rekordów (w bazie danych).

Muszę teraz za pomocą drugiej tablicy (tablica "typów") zostawić tylko te dwa typy w pierwszej tablicy, ale musi zostać typ z największą ceną.

Ciężko to wytłumaczyć, ale muszę uzyskać coś takiego:
Kod
Array (
[1] => Array ( [nazwa] => Kurier DPD [koszt] => 40.00 [opis] => Wysyłka kurierem DPD. )
[3] => Array ( [nazwa] => Poczta Polska [koszt] => 15.00 [opis] => List priorytetowy )
)


Przez to, że jedna tablica jest wielowymiarowa nie potrafię sobie nawet rozplanować tego, jak to wykonać.

Proszę o pomoc!



Można to zrobić tak
  1. //$first = Array (
  2. //1 => Array ( 'nazwa' => 'Kurier DPD', 'koszt' => 40.00, 'opis' => 'Wysyłka kurierem DPD.' ),
  3. //5 => Array ( 'nazwa' => 'Poczta Polska', 'koszt' => 12.00, 'opis' => 'Paczka priorytetowa' ),
  4. //3 => Array ( 'nazwa' => 'Poczta Polska', 'koszt' => 15.00, 'opis' => 'List priorytetowy' ),
  5. //4 => Array ( 'nazwa' => 'Poczta Polska', 'koszt' => 7.00, 'opis' => 'List priorytetowy' )
  6. //);
  7.  
  8. //$last = Array ( 0 => 'Kurier DPD', 1 => 'Poczta Polska' );
  9.  
  10. $end_array = array();
  11.  
  12. function koszt_sort ($x, $y) {
  13. return ($x['koszt'] < $y['koszt']);
  14. }
  15.  
  16. uasort ($first, 'koszt_sort');
  17.  
  18. $i = 1;
  19. foreach($last AS $value){
  20.  
  21. foreach($first AS $key => $value1){
  22.  
  23. if($value == $first[$key]['nazwa']){
  24.  
  25. if($i == 1){
  26. $end_array[$key] = Array ( 'nazwa' => $first[$key]['nazwa'], 'koszt' => $first[$key]['koszt'], 'opis' => $first[$key]['opis']);
  27. }
  28. $i++;
  29. }
  30. }
  31.  
  32. $i = 1;
  33.  
  34. }
  35.  
  36. //echo '<pre>';
  37. //print_r($end_array);
  38. //echo '</pre>';


I myślę że złym rozwiązaniem jest robienie zapytania w pętli
  1. foreach($_SESSION['koszyk'] as $key => $value) {
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.