2010-06-13 6 views
0

Le code suivant renvoie would, où nous attendons la sortie 12/5/10. La raison est array_search ne fonctionne que sur les tableaux associatifs et explode renvoie un tableau sans clé, donc $k est false et $k+1 est 1.Transformation d'un tableau sans clé en tableau associatif

$s = 'We would like to book a double room form 12/5/10 for three nights.'; 
$s_arr = explode(' ', $s); 
$k = array_search('from', $s_arr); 
$from = $s_arr[$k+1]; 
echo $from; 

Nous pouvons vérifier cela en utilisant une définition littérale comme celui-ci

$s_arr = array(
    0 => 'We', 
    1 => 'would', 
    2 => 'like', 
    3 => 'to', 
    4 => 'book', 
    5 => 'a', 
    6 => 'double', 
    7 => 'room', 
    8 => 'form', 
    9 => '12/5/10', 
    10=> 'for', 
    11=> 'three', 
    12=> 'nights.'); 
$k = array_search('from', $s_arr); 
$from = $s_arr[$k+1]; 
echo $from; 

Cette fois la valeur correcte est sur ce qui est 12/5/10.

Existe-t-il un moyen de transformer un tableau sans clé en un tableau associatif?

+0

Juste essayé le deuxième bloc de code, il échoue aussi! Qu'est-ce que je rate? –

+1

Pourquoi faites-vous cela du tout? Il semble que le but de cette fonction est d'extraire la date. Si c'est le cas, il serait logique d'utiliser une expression régulière. preg_match est beaucoup plus rapide pour ces choses que votre tableau exploser roundtrip et array_search. – mario

+0

@mario - ce sont les premières étapes pour implémenter un répondeur intelligent. Beaucoup de choses vont changer, mais pour l'instant exploser + la recherche ferait l'affaire. –

Répondre

4

Je dirais que c'est le cas parce que vous avez mal orthographié "de" dans la chaîne d'origine que vous êtes en train d'exploser.

+0

Juste testé ce code avec l'orthographe corrigée, et cela fonctionne très bien. – cam8001

+0

Merci l'homme! La vie est difficile pour le codeur dyslexique. –

+1

@Majid - Je recommande d'utiliser Netbeans ou un autre IDE - ce qui devrait faciliter l'identification de fautes de frappe comme celle-ci. En outre, définissez la journalisation des erreurs pour inclure E_NOTICE et gardez un œil sur le journal des erreurs (http://php.net/manual/en/errorfunc.configuration.php) –