2011-07-12 8 views
2

Existe-t-il un moyen d'accéder à un tableau multidimensionnel à partir de n'importe quelle position? exemple:tableau multidimensionnel

$arr = array (

    1 => array (1, 'some-url-one', 'Some Title One'), 

    2 => array (2, 'some-url-two', 'Some Title Two'), 

    3 => array (2, 'some-url-three', 'Some Title Three'), 

); 

Ensuite, si nous avons l'id d'un élément, par exemple 2 et que vous voulez obtenir le titre de cet article nous utilisons simplement:

$title = $arr[2][2]; // which outputs Some Title Two 

Et si nous voulons obtenir le URL de ce même article, nous utilisons simplement:

$title = $arr[2][1]; // which outputs some-url-two 

mais si nous avons l'URL (une url-deux) et que vous voulez obtenir l'ID ou le titre de cet article?

Il y a 2 obligations:

boucle

1- à travers le réseau et vérifier si cette URL existe 2- obtenir l'ID et le titre

Comment faire que la meilleure façon? J'ai déjà 3 tableaux:

1- id url

2- URL pour id

3- id à titre

$id2url = array (

    1 => 'some-url-one', 
    2 => 'some-url-two', 
    3 => 'some-url-three' 

); 

Et les deux autres sont la même procédure. Je voulais donc optimiser mon code en combinant les 3 tableaux. Alors, comment accéder à l'ID et le titre avec une adresse donnée?

Merci.

Répondre

2

Vous pouvez chercher array_flip()PHP Manual, il fera de votre tableaux de consultation fonctionnent avec leurs valeurs clés:

$id2url = array (

    1 => 'some-url-one', 
    2 => 'some-url-two', 
    3 => 'some-url-three' 

); 

$url2id = array_flip($id2url); // keys will become values, and values keys. 

$id = $url2id[$url]; 

$title = $arr[$id][2]; 
+0

et pour trois groupes comme celui ci-dessus? – medk

+1

Cela ne fonctionnera pas, les clés ne peuvent être que des entiers ou des chaînes, mais pas des tableaux. Vous avez donc besoin d'un tableau fonctionnant comme le hash de recherche. C'est l'index de votre tableau multidimensionnel. – hakre

+0

C'est un problème de recherche général - l'approche standard consiste à construire un index inversé, ce que fait array_flip() ici. Si vos tableaux sont relativement petits, vous pouvez ne pas vous soucier de la recherche O (n) ... sinon, s'il s'agit de données extraites de DB, vous pouvez ajouter un index dans la colonne URL. – fearlesstost

1

Vous pouvez utiliser array_search comme ceci:

$id = array_search($url, $url2id); 
0

Il est un moyen plus facile gérer cela je pense. Si vous avez déjà l'URL alors vous pourriez potentiellement déjà avoir l'index dans le tableau parent de toutes les données. Dans ce cas, vous pouvez simplement accéder à cette

$found_id = $arr[$known_parent_idx][0]; 
$found_title = $arr[$known_parent_idx][2]; 

Toutefois, si vous ne possédez pas cet indice, vous pouvez alors faire une vérification à base de boucles comme ceci. Dites votre boucle à travers ce tableau multidimensionnel, voici comment cela fonctionne.

foreach ($arr AS $idx => $subarr) 
{ 
    if ($subarr[1] == $known_url) 
    { 
    $found_id = $subarr[0]; 
    $found_title = $subarr[2]; 
    } 
} 

Vous pouvez maintenant vous faciliter la tâche si l'URL est également l'index parent. Dans ce cas, nous parlons d'un tableau associatif. Voici une structure qui pourrait être plus utile.

$arr = array (
    'some-url-one' => array ('id' => 1, 'title' => 'Some Title One'), 
    'some-url-two' => array ('id' => 2, 'title' => 'Some Title Two'), 
    'some-url-three' => array ('id' => 2, 'title' => 'Some Title Three'), 
); 

Ceci vous permettrait de trouver instantanément ce que vous cherchez sans aucune recherche. Mais cela nécessiterait que les URL soient uniques dans chaque cas.