• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Array - obrabianie danych

0 głosów
42 wizyt
pytanie zadane 7 grudnia 2018 w PHP, Symfony, Zend przez Raptor Mądrala (5,680 p.)



$arr= Array(
  [40] => '44',
  [140] => '',
  [240] => '21',
  [44] => '23',
  [144] => '',
  [244] => '11',
  [49] => '',
  [149] => '',
  [249] => '',
  [119] => '',
  [219] => '',
  [319] => '',
);

To wyżej to przykładowa tablica, którą otrzymuje.

Czy ktoś może mi podpowiedzieć w jaki sposób najlepiej skonstruować algorytm?
 

Już tłumacze o co konkretnie mi chodzi. Trzy wartosci z rzędu tak jakby przypisane są do jednego "obiektu" i chcialbym sprawdzić czy któraś z nich jest pusta, jeżeli któraś z trzech wartosci jest pusta ale pozostałe z tych trzech maja wartosc zwracam false, jezeli wszystkie trzy maja wartosc to true. Natomiast jeżeli wszystkie są puste to również true.

1 odpowiedź

0 głosów
odpowiedź 7 grudnia 2018 przez Tnifey Stary wyjadacz (12,890 p.)
edycja 7 grudnia 2018 przez Tnifey
  1. mapujemy wartości
  2. z mapowanych wartości robimy chunki
  3. loop przez te chunki
    1. filtrujemy wartości chunku - jeśli true to true, jeśli false to false :)
    2. sprawdzamy liczbę pozostałych elementów chunku
      1. zapisujemy true jeśli count($filter) === 3 || count($filter) === 0
      2. false jeśli inaczej
$arr = [
  "40" => '44',
  "140" => '',
  "240" => '21',
  "44" => '23',
  "144" => '',
  "244" => '11',
  "49" => '',
  "149" => '',
  "249" => '',
  "119" => '',
  "219" => '',
  "319" => '',
];

// mapujemy - jeśli jest string jest większy od 0 czyli jeśli jest wartość w nim to zamieniamy na true jeśli nie ma to false
$mapped = array_map(function ($element) {
  return strlen($element) > 0;
}, $arr);

// robimy chunki czyli dzielimy tablicę po 3 elementy
$chunked = array_chunk($mapped, 3, true);

$retrned = [];
// loop przez wszystkie chunki 
foreach($chunked as $chunk => $element) {

  // filtrujemy wartości - jeśli jest true to zostaje w tablicy
  $filter = array_filter($element, function ($item) {
    return $item;
  });

  // jeśli wszystkie były true albo wszystkie false to zwracamy true
  if(count($filter) === 3 || count($filter) === 0) {
    $returned[$chunk] = true;
  } else {
    
    $returned[$chunk] = false;
  }
}

print_r($returned);

https://repl.it/@HubertLesiak/DarkvioletVictoriousBases

w $returned póżniej znajduje się

Array
(
    [0] => false
    [1] => false
    [2] => true
    [3] => true
)

ogólnie jak już to ma być jeden obiekt z tych 3 wartości to można też zrobić metodę sprawdzającą to w tym obiekcie :)

http://php.net/manual/pl/function.array-chunk.php

http://php.net/manual/pl/function.array-map.php

http://php.net/manual/pl/function.array-filter.php

Podobne pytania

0 głosów
1 odpowiedź 114 wizyt
pytanie zadane 15 listopada 2015 w PHP, Symfony, Zend przez kaminiak23 Użytkownik (640 p.)
0 głosów
1 odpowiedź 181 wizyt
0 głosów
1 odpowiedź 76 wizyt
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

61,385 zapytań

107,325 odpowiedzi

223,536 komentarzy

33,147 pasjonatów

Przeglądających: 127
Pasjonatów: 8 Gości: 119

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...