Skocz do zawartości

Zdjęcie
* * * * * 1 głosy

Wyszukiwanie w array.


Najlepsza odpowiedź Viso, 04 marca 2014 - 19:15

Elementy jak join to wartości tablicy, a nie klucze, więc jeśli potrzebujesz wyszukiwać po wartościach to rozwiązaniem będzie tutaj array_values, dla kluczy zaś array_keys jak zostało napisane w postach wyżej.

 

Mimo wszystko najlepiej skorzystać z funckji array_search

<?php 
$map = array(
	'q' => 'quit', 
	'j' => 'join', 
	'u' => 'users'
);

$offset = array_search('join', $map); 
Przejdź do postu


14 odpowiedzi w tym temacie
  • Zamknięty Temat jest zamknięty
WebRapko

    Użytkownik

  • 97 postów
    • Czas spędzony online: 12m
-12
Słaba
  • LocationMalopolska

Napisano 04 marca 2014 - 15:12

#1
Witam, mam jedno pytanie, czy jezeki mam taki kod:
array(
'q' => 'quit', 
'j' => 'join', 
'u' => 'users');
Moge po wpisaniu np "users" dowiedziec sie jaki byl klucz do niego? Np. Wpisze: "join" to wyswietli mi "j" ? Jest jakas funkcja ktora dziala na tej zasadzie?
Chodzi mi o cos jak array_keys() ale awantura jest o jeden konkretny klucz z calej tablicy :D
  • 0

writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 04 marca 2014 - 16:42

#2

Nie wiem czy istnieje jakaś gotowa funkcja, ale można to ławo zrobić z pomocą pętli,

$tablica = array(
		'q' => 'quit', 
		'j' => 'join', 
		'u' => 'users');
	
	$szukana_wartosc = "users"; // np. $szukana_wartosc = $_GET['szukaj']; - url = ?szukaj=users
	
	foreach ($tablica as $klucz => $wartosc) {
		if($wartosc == $szukana_wartosc) echo $klucz;
	}

  • 1

logo-green-dark.png


unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 04 marca 2014 - 17:05

#3

Serio? :P

$array = array(
'q' => 'quit', 
'j' => 'join', 
'u' => 'users');

print_r( array_keys($array,'join') ); //zwraca tablice bo elementy moga sie powtarzac

Użytkownik unbreak edytował ten post 04 marca 2014 - 17:05

  • 1

webDeveloper


writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 04 marca 2014 - 18:29

#4

Nie używałem nigdy tej funkcji. Ale jeśli autor prosił o coś innego to podałem alternatywne rozwiązanie. :P


  • 0

logo-green-dark.png


Viso

    Nowy użytkownik

  • 11 postów
    • Czas spędzony online: 55m 18s
3
Neutralna
  • LocationKraków

Napisano 04 marca 2014 - 19:15   Najlepsza odpowiedź

#5

Elementy jak join to wartości tablicy, a nie klucze, więc jeśli potrzebujesz wyszukiwać po wartościach to rozwiązaniem będzie tutaj array_values, dla kluczy zaś array_keys jak zostało napisane w postach wyżej.

 

Mimo wszystko najlepiej skorzystać z funckji array_search

<?php 
$map = array(
	'q' => 'quit', 
	'j' => 'join', 
	'u' => 'users'
);

$offset = array_search('join', $map); 

  • 2

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 05 marca 2014 - 08:47

#6

Problem w tym że array_search w przypadku gdy w array-u wystąpią dwie takie same wartości o różnych kluczach to wyrzuci tylko pierwszy klucz, a array_keys wyrzuci tabelę wszystkich kluczy.


  • 1

webDeveloper


WebRapko

    Użytkownik

  • 97 postów
    • Czas spędzony online: 12m
-12
Słaba
  • LocationMalopolska

Napisano 05 marca 2014 - 18:33

#7
Viso - Najlepsza odpowiedz, tego szukalem ;D, dziekuje wszystkim za zaangazowanie. ;P
  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 06 marca 2014 - 08:51

#8

Dupa a nie najlepsza :P


  • 1

webDeveloper


WebRapko

    Użytkownik

  • 97 postów
    • Czas spędzony online: 12m
-12
Słaba
  • LocationMalopolska

Napisano 06 marca 2014 - 18:25

#9
W kazdym razie to czego szukalem haha ;P
  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 06 marca 2014 - 19:56

#10

Możliwe, tylko weź pod uwagę (nie wiem do czego to potrzebujesz), to w przypadku takiego arrayu:

$tablica = array(
		'q' => 'quit', 
		'j' => 'join', 
		'j2' => 'join', 
		'u' => 'users');

Ta funkcja dla 'join' zwróci Ci jedynie "j" a "j2" pominie.


  • 0

webDeveloper


Viso

    Nowy użytkownik

  • 11 postów
    • Czas spędzony online: 55m 18s
3
Neutralna
  • LocationKraków

Napisano 06 marca 2014 - 22:10

#11

@Up

Na moje oko, ustawia skróty dla danej funkcjonalności/pełnej nazwy danej czynności, więc jeśli join tyczy się dwóch skrótów jak j i j2 to i tak wyjdzie na to samo. Zupełnie identycznie będzie na odwrót gdy wywoła j lub j2, nastąpi znalezienie join, ponieważ nawet jeśli jeden skrót będzie pominięty i tak trafi na właściwą czynność.

 

Innym rozwiązaniem mogła by tu być tablica dwuwymiarowa

<?php 
$map = array(
	// czynnosc => skrot(y)
	'quit' 	=> 'q', 
	'join' 	=> array('j', 'j2'), 
	'users' => array('u', 'sth'), 
	'sth2' 	=> 'x', 
	'sth3' 	=> array('y', 'z'), 
);

  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 07 marca 2014 - 08:56

#12

Tak jak pisałem, wszystko zależy od tego do czego potrzebuje tego szukania :D


  • 0

webDeveloper


WebRapko

    Użytkownik

  • 97 postów
    • Czas spędzony online: 12m
-12
Słaba
  • LocationMalopolska

Napisano 08 marca 2014 - 21:18

#13
Mam czata gg i rb aliasy no xd i musze miec do komendy /help XDD
  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 10 marca 2014 - 09:21

#14

No to jeżeli masz pewność że relacja będzie zawsze 1:1 to wystarczy Ci takie rozwiązanie :)


  • 0

webDeveloper


WebRapko

    Użytkownik

  • 97 postów
    • Czas spędzony online: 12m
-12
Słaba
  • LocationMalopolska

Napisano 15 marca 2014 - 00:16

#15
Dziekuje i pozdrawiam.
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych