【问题标题】:fastest way to get element values from an array object in php从php中的数组对象获取元素值的最快方法
【发布时间】:2011-07-26 10:33:32
【问题描述】:

我有这样的事情

Array
(
    [0] => stdClass Object
        (
            [CustomerID] => 14
            [Email] => joe.blogs@example.com
            [LastName] => Blogs
            [BirthDayOfMonth] => 29
            [Gender] => 
            [Occupation] => 
            [SendSpecialOffers] => 1
            [SendReminderNotes] => 1
        )

    [1] => stdClass Object
        (
            [CustomerID] => 1460
            [Email] => example@example.com
            [LastName] => Example
            [BirthDayOfMonth] => 5
            [Gender] => F
            [Occupation] => 
            [SendSpecialOffers] => 1
            [SendReminderNotes] => 1
        )
);

我想得到每个用逗号分隔的电子邮件地址,像这样

'joe.blogs@example', 'example@example.com'

我知道我可以通过 foreach 对其进行迭代,但我得到了一个非常大的列表,有没有更快的方法?谢谢

现在,如何删除基于某些电子邮件地址的索引?

【问题讨论】:

  • 我希望那些电子邮件地址的所有者不介意您将它们发布在这里... ;)
  • “但是我有一个非常大的列表”——ORM 的危险!

标签: php arrays object


【解决方案1】:

您可以使用数组映射和函数来执行此操作,但这也会迭代您的数组

echo implode(',',array_map('getEmail',$array));

function getEmail($obj)
{
  return $obj->Email;
}

【讨论】:

    【解决方案2】:

    最简单的解决方案确实是使用foreach() 来遍历数组中的所有项目;将每个项目的电子邮件添加到另一个结果数组。


    也许您可以通过调用 array_walk() 来替换 foreach,但它可能不会有太大变化:

    • 你不会在 PHP 中循环,因为array_walk 是用 C 编码的(可能比 foreach 快一点——但不确定)
    • 但是会为每个项目调用一个函数,而不仅仅是几个 PHP 指令。

    您必须进行基准测试,看看您的具体情况是否有显着差异 - 但我个人会选择 foreach,而不用考虑更多。

    【讨论】:

      【解决方案3】:

      array_filter 是最好的。请参阅手册中的示例

      【讨论】:

      • array_filter() 返回一个元素数组,根据给定的回调将其视为“有效”。你能解释一下,你想如何使用它从每个数组元素中提取一个对象属性?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      相关资源
      最近更新 更多