Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php在数组中执行用户函数_Php_Arrays - Fatal编程技术网

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

使用php在数组中执行用户函数,php,arrays,Php,Arrays,我有一个数组,其中包含的项目比这一个多得多。 这只是一个项目的示例: [0] => Array ( [id] => 6739380664 [created_at] => 1260991464 [text] => @codeforge thx for following [source] => web [user] => Arr

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

[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;
}
函数解析链接($text)
{
$text=ereg_replace(“[[:alpha:]+://[^[:space:]+[:alnum://]”,“”,$text);
返回$text;
}
如何将函数
parseLink($text)
应用于数组项
text
,而不必经过循环

它返回包含所有字段的整个数组,但带有修改后的数组字段
文本
?它不仅仅是项目
$myarray[0]
;还有更多的项目,如
$myarray[1]、$myarray[2]
等等。

您可以通过两种不同的方式来完成:

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']);
函数解析链接(&$text)
{
$text=ereg_replace(“[[:alpha:]+://[^[:space:]+[:alnum://]”,“”,$text);
返回$text;
}
parseLink($myArray[0]['text']);

编辑:我的错误,请尝试以下操作:

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

array_map($myFunction,$myArray);
您还应将函数更改为通过引用传递:

function parseLink(&$text)
{
  $text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $text);
}
函数解析链接(&$text)
{
$text=ereg_replace(“[[:alpha:]+://[^[:space:]+[:alnum://]”,“”,$text);
}
请注意,您的
parseLink()
函数中也有一个bug,我已经修复了。

函数parseLink($data)
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);
{ if(is_数组($data)和&isset($data['text'])) { $data['text']=ereg_replace(“[[:alpha:][]+://[^[:space:][]+[[:alnum:][]],”,“,$data['text']); }elseif(is_字符串($data)) { $data=ereg_replace(“[[:alpha:]+://[^[:space:]+[[:alnum://]”,“,”,$data); } 返回$data; } 数组映射('parseLink',$myArray);
你可以在php中这样做<5.3,可以吗?但我在该数组中没有一个项目,可能有大约20个,使用你的解决方案,我无法访问文本项目$myarray[0]['text']确保你可以像
foreach($myarray as$item){parseLink($item['text']);}那样在循环中对其进行jsut
然后使用我对数组的解决方案,我想。。。你到底为什么如此反对循环?@streetparade:如果你只谈论数百人或更少的领域(正如你在上面的评论中所暗示的),那就不是什么大问题了。如果还有更多,那么就可以了,但是我不知道在C中基本上在数组内部循环的函数会给您带来这么大的收益,而不是在php中使用最经济的循环结构(我相信这是
循环,但我可能错了)。事实上,在array_map的例子中,我认为对于这个简单的事情,循环实际上可能更快,但我不是100%同意。@streetparade:不要担心循环的性能。循环的性能将与PHP中的任何其他技术一样好(它不做任何可能加快速度的线程化操作)。PHP中的任何其他技术都可能只是在引擎盖下使用循环(例如,
array\u map
)。在任何情况下,CPU时间都不可能成为用PHP编写的典型数据库驱动web应用程序的瓶颈。如果您没有实际测量性能问题,请不要担心。
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);