Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Multitidimensional array
KR2615
post 28.09.2022, 09:00:05
Post #1





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


Hej
Mam w bazie MySQLu odczyty z urządzeń sieciowych. Struktura bazy wygląda tak:
  1. CREATE TABLE `sg_queues` (
  2. `id` int NOT NULL,
  3. `devid` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  4. `date` date NOT NULL,
  5. `error` int DEFAULT NULL,
  6. `value` text NOT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

Pole value zawiera od kilkuset do tysiąca linijek typu:
Kod
ID2172;192.168.106.8/32;0/0;JAN_NOWAK_(10);typ/typ;false;14859234/652905818;116182/518319
ID2201;192.168.106.9/32;0/0;DABROWSKI_LUKASZ_(10);typ/typ;false;94048477/3741833695;698959/2845428
ID2076;192.168.106.10/32;0/0;KOWALSKI_GRZEGORZ_(10);typ/typ;false;35780712/827862853;365418/647407

Pierwsza wartość rozdzielona ; to jak widać ID klienta.

Innym poleceniem pobieram sobie z innej bazy danych listę klientów i wyszukuję w tym polu value [text] odpowiedniej linijki:
  1. $sgq = "SELECT * FROM `sg_queues` WHERE date = '$data' AND devid = '$devid' ORDER BY id DESC LIMIT 1";
  2. $sgres = $mysqli -> query($sgq);
  3. $queue = mysqli_fetch_array($sgres, MYSQLI_ASSOC);
  4. $lines = explode(PHP_EOL, $queue['value']);
  5.  
  6. $cq = "SELECT * FROM `customers` WHERE status = '1';
  7. $res = $mysqli -> query($cq);
  8.  
  9. while($cust = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
  10. $search_string = '/ID'.sprintf('%04d', $cust['id']).'/';
  11. $found = preg_grep($search_string, $lines)
  12. var_dump($found);
  13. }

W odpowiedzi dostaję mniej więcej coś takiego:
Cytat
array(1) { [47]=> string(103) "ID2172;192.168.106.8/32;0/0;JAN_NOWAK_(10);typ/typ;false;14859234/652905818;116182/518319" }
array(1) { [1077]=> string(103) "ID2201;192.168.106.9/32;0/0;DABROWSKI_LUKASZ_(10);typ/typ;false;94048477/3741833695;698959/2845428" }
array(1) { [384]=> string(103) "ID2076;192.168.106.10/32;0/0;KOWALSKI_GRZEGORZ_(10);typ/typ;false;35780712/827862853;365418/647407" }

Nie za bardzo tylko wiem, jak odnieść się potem w kodzie do tej wartości string(103) nie znając teo pogrubionego ID. Czy ktoś może pomóc?


--------------------
Go to the top of the page
+Quote Post
nospor
post 28.09.2022, 09:10:58
Post #2





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Nie bardzo rozumiem o co pytasz. Co chcesz ostatecznie miec?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
KR2615
post 28.09.2022, 14:23:51
Post #3





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


chciałbym sobie np. funkcjoą explode() pociąć po ; tego stringa ale raz kryje mi się on pod $found[47][0], innym razem jako $found[1077][0]. Jak ten numerek namierzyć?


--------------------
Go to the top of the page
+Quote Post
nospor
post 28.09.2022, 14:26:34
Post #4





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Nie kumam. Przeciez masz w zmiennej $found swoje ciagi to je sobie tnij. Wszystko tam masz.

A jak bardzo sie upierasz, by pobrac te 47 to po to jest funkcja key(). Ale nadal uwazam ze to jest zbedne jej uzycie, skoro w $found masz wszystko co ci potrzeba.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 28.09.2022, 14:27:39
Post #5





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Po prostu znaleziony wynik wrzucaj do tablicy, $cust['id'] to klucz tablicy, a linijka wartość dla tego klucza.


--------------------
Go to the top of the page
+Quote Post
KR2615
post 28.09.2022, 15:34:17
Post #6





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


Tylko jak mam ciąć? Te 47 i 1077 to nie są ID klienta tylko numery linijki z $queues['value'];
Taki kod:
  1. var_dump($found);
  2. $values = explode(";", $found);

daje:
Kod
<b>Warning</b>:  explode() expects parameter 2 to be string, array given in <b>/var/www/noc/noc.inc.php</b> on line <b>1645</b><br />
array(1) {
  [48]=>
  string(90) "ID0014;192.168.103.8/32;0/0;BIURO;EPC/EPC;false;51875790/1190583277;305371/1008306"
}


--------------------
Go to the top of the page
+Quote Post
Salvation
post 28.09.2022, 15:39:58
Post #7





Grupa: Zarejestrowani
Postów: 335
Pomógł: 70
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


Co Ty chcesz ciąć skoro 47 i 1077, z Twojego przykładu, to klucze tablicy?

  1. foreach ($found as $id => $text) {
  2. $texts = explode(';', $text);
  3.  
  4. var_dump($id);
  5. var_dump($texts);
  6. }
Go to the top of the page
+Quote Post
KR2615
post 28.09.2022, 23:18:07
Post #8





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


O właśnie, o klucze tablicy mi chodziło. Zadziałało, dzięki!


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.03.2024 - 09:59