使用php在数组中执行用户函数

时间:2009-12-18 21:20:13

标签: php arrays

我有一个包含比这个更多的项目的数组。 这只是一个项目的示例:

[0] => Array
        (
            [id] => 6739380664
            [created_at] => 1260991464
            [text] => @codeforge thx for following
            [source] => web
            [user] => Array
                (
                    [id] => 90389269
                    [name] => Lea@JB
                    [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
        )

我有一个功能

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

如何为数组项parseLink($text)应用我的函数text,而不必经历循环?

它返回包含所有所有字段的整个数组,但是使用了modiefied数组字段 text?这不仅仅是项目$myarray[0];还有更多项目,例如$myarray[1],$myarray[2]和很快。

4 个答案:

答案 0 :(得分:6)

您可以通过两种不同的方式完成此任务:

1)您可以使用parseLink()的返回值并在数组中重新分配变量:

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

2)您可以修改parseLink()函数以通过引用接受参数,这将导致它被修改到位:

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

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

答案 1 :(得分:1)

编辑:我的错误,试试这个:

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

array_map($myFunction,$myArray);

答案 2 :(得分:1)

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

你应该改变你的功能以便通过引用传递:

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

请注意,我修复了parseLink()功能中的错误。

答案 3 :(得分: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);