使用外部格式处理函数中的数组

发布于 2024-08-22 18:07:28 字数 472 浏览 6 评论 0原文

我想将数组传递给函数并在该函数中迭代它。但我希望能够更改单个条目的显示方式。

假设我有一组复杂的对象:

$items = array($one, $two, $three);

现在我这样做:

$entries = array();
foreach($items as $item) {
    $entries[] = create_li($item["title"], pretty_print($item["date"]));
}
$list = wrap_in_ul($entries);

我想在一行中完成上述操作:

$list = create_ul($items, $item["title"], pretty_print($item["date"]));

从 PHP4 开始有机会这样做吗?有创意!

I want to pass an array to a function and iterate through it in this function. But I would like to be able to change the way the single entries are displayed.

Suppose I have an array of complicated objects:

$items = array($one, $two, $three);

Right now I do:

$entries = array();
foreach($items as $item) {
    $entries[] = create_li($item["title"], pretty_print($item["date"]));
}
$list = wrap_in_ul($entries);

I would like to do the above in one line:

$list = create_ul($items, $item["title"], pretty_print($item["date"]));

Any chance of doing that as of PHP4? Be creative!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

熟人话多 2024-08-29 18:07:28

根据我的理解,您正在寻找带有功能参数的“注入”类型迭代器。在php中,注入迭代器是array_reduce,不幸的是它被破坏了,所以你必须编写自己的迭代器,例如

function array_inject($ary, $func, $acc) {
 foreach($ary as $item)
  $acc = $func($acc, $item);
 return $acc;
}

定义一个回调函数来处理每个项目并返回累加器值:

function boldify($list, $item) {
 return $list .= "<strong>$item</strong>";
}

剩下的很简单:

$items = array('foo', 'bar', 'baz');
$res = array_inject($items, 'boldify', '');
print_r($res);

from my understanding, you're looking for an "inject" type iterator with a functional parameter. In php, inject iterator is array_reduce, unfortunately it's broken, so you have to write your own, for example

function array_inject($ary, $func, $acc) {
 foreach($ary as $item)
  $acc = $func($acc, $item);
 return $acc;
}

define a callback function that processes each item and returns accumulator value:

function boldify($list, $item) {
 return $list .= "<strong>$item</strong>";
}

the rest is easy:

$items = array('foo', 'bar', 'baz');
$res = array_inject($items, 'boldify', '');
print_r($res);
蓝色星空 2024-08-29 18:07:28

您可以使用回调:

function item_title($item) {
    return $item['title'];
}
function item_date($item) {
    return $item['date'];
}
function prettyprint_item_date($item) {
    return pretty_print($item['date']);
}

function create_ul($items, $contentf='item_date', $titlef='item_title') {
    $entries = array();
    foreach($items as $item) {
        $title = call_user_func($titlef, $item);
        $content = call_user_func($contentf, $item);
        $entries[] = create_li($title, $content);
    }
    return wrap_in_ul($entries);
}
...
$list = create_ul($items, 'prettyprint_item_date');

PHP 5.3 将是一个巨大的胜利,因为它支持匿名函数。

You could use callbacks:

function item_title($item) {
    return $item['title'];
}
function item_date($item) {
    return $item['date'];
}
function prettyprint_item_date($item) {
    return pretty_print($item['date']);
}

function create_ul($items, $contentf='item_date', $titlef='item_title') {
    $entries = array();
    foreach($items as $item) {
        $title = call_user_func($titlef, $item);
        $content = call_user_func($contentf, $item);
        $entries[] = create_li($title, $content);
    }
    return wrap_in_ul($entries);
}
...
$list = create_ul($items, 'prettyprint_item_date');

PHP 5.3 would be a big win here, with its support for anonymous functions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文