2009-12-18 3 views
0

J'ai un tableau contenant beaucoup plus d'éléments que celui-ci. Ceci est juste un exemple d'un élément:Exécution d'un utilisateur Fonction dans un tableau avec php

[0] => Array 
     (
      [id] => 6739380664 
      [created_at] => 1260991464 
      [text] => @codeforge thx for following 
      [source] => web 
      [user] => Array 
       (
        [id] => 90389269 
        [name] => [email protected] 
        [screen_name] => Lea_JB 
        [description] => Fan of JB and Daourite singers!! (: 
        [location] => Germany 
        [url] => 
        [protected] => 
        [followers_count] => 33 
        [profile_image_url] => http://a3.01/Usher_und_JB_normal.jpg 
       ) 

      [truncated] => 
      [favorited] => 
      [in_reply_to_status_id] => 
      [in_reply_to_user_id] => 18055539 
     ) 

Et j'ai une fonction

function parseLink($text) 
{ 
    $text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $text); 
    return $text; 
} 

Comment puis-je appliquer ma fonction parseLink($text) pour l'élément du tableau text, sans avoir à passer par une boucle? Cela renvoie l'ensemble du tableau contenant tous les champs tels quels, mais avec le champ de tableau modié text? Ce n'est pas seulement l'article $myarray[0]; il y a plus d'articles comme $myarray[1],$myarray[2] et bientôt.

Répondre

6

Vous pouvez accomplir cela de 2 façons différentes:

1) Vous pouvez utiliser la valeur de retour de parseLink() et réassigner la variable dans le tableau:

$myText = parseLink($myArray[0]['text']); 
$myArray[0]['text'] = $myText; 

2) Vous pouvez modifier votre parseLink() fonction d'accepter l'argument par référence qui amèneraient à modifier en place:

function parseLink(&$text) 
{ 
    $text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $text); 
    return $text; 
} 

parseLink($myArray[0]['text']); 
+0

mais je n'ai pas un seul élément de ce tableau, il est peut-être environ 20 et avec votre Soulution je ne peux pas accéder à l'élément texte myarray $ [0] [ « text »] – streetparade

+1

que vous pouvez qu'exclusivement à travers elle dans une boucle telle que 'foreach ($ myArray as $ item) { parseLink ($ item ['text']); } ' – prodigitalson

+0

c'est le point que je ne veux pas aller jeter une boucle, – streetparade

1

Edit: mon erreur, essayez ceci:

$myFunction = function parseLink($text) { /* do stuff with $text */ }; 

array_map($myFunction,$myArray); 
+0

cela ne fonctionne pas – streetparade

+0

vous pouvez le faire en PHP <5.3 pouvez-vous? – prodigitalson

+2

Ne fonctionne toujours pas. Indice: $ text n'est pas une chaîne. – Rob

1
// assume your array is stored in $myArray 
parseLink($myArray[0]['text']); 

Vous devez changer votre fonction pour passer par référence ainsi:

function parseLink(&$text) 
{ 
    $text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $text); 
} 

S'il vous plaît noter que vous avez eu un bug dans votre fonction parseLink() ainsi que je fixe.

1
function parseLink($data) 
{ 
    if(is_array($data) && isset($data['text'])) 
    { 
    $data['text'] = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $data['text']); 
    } elseif(is_string($data)) 
    { 
    $data = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $data); 
    } 


    return $data; 
} 

array_map('parseLink', $myArray); 
Questions connexes