使用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);