【问题标题】:How can I split a php array column into two如何将 php 数组列拆分为两个
【发布时间】:2021-12-29 05:41:59
【问题描述】:

我无法在网上找到任何可以解决这个确切问题的帮助。我以标准二维 php 数组的形式从 mysql 表中提取数据。其中一个列标题是“姓名”,名字和姓氏之间用空格隔开,例如“John Smith”。我想要做的是,在数组中(不在表中),用两列替换“名称”列:“名字”,例如“约翰”和“姓氏”,例如“史密斯”。我尝试使用 php 函数 'array_column()' 提取 'name' 列,并使用带有 'explode()' 函数的 foreach 循环,但这只是给了我一个名称子数组。我想要的是整个数组,但所有记录的“名称”列都更改为“名字”和“姓氏”。我该怎么办?

【问题讨论】:

  • 请提供您的最佳尝试(代码),以及您尝试操作的阵列的代表性样本。明确说明您的预期结果。阅读How to Ask
  • 您的问题缺少输入数组的示例。可能不是您正在考虑的标准二维数组。将全名分成名字和姓氏也并不简单。有些人有 2 或 3 个名字或 2 或 3 个姓氏。任何组合都是可能的。你不能简单地在一个空间上分割。
  • 来吧,迈克,不要害羞,只需向我们展示一个示例或数组,然后将您的代码放入问题中,听起来您几乎就在那里,您可能只需要最后推一下正确的方向
  • 小点您还必须考虑不是简单的“John Smith”并且其中包含超过 1 个空格的名称

标签: php mysql arrays


【解决方案1】:

您应该考虑添加一些示例或您尝试过的代码。 下面的示例将保留数组中的所有内容以及名称,但它会创建一个新数组并将所有值放入其中。

<?php

$data = [
    [ 'name' => 'John Doe' ],
    [ 'name' => 'Jane Doe' ],
    [ 'name' => 'Adam Jensen' ],
    [ 'name' => 'Seann Willam Scott' ]
];

$newData = \array_map(function(array $record) {
    if (!isset($record['name']) || empty($record['name'])) { return false; } //just in case there's no name in the record
    $parts = \explode(' ', $record['name']);

    // Last name is usually the last part, right?
    // Poping the last element will modify the $parts array, leaving just the first names
    $record['lastname'] = \array_pop($parts);
    $record['firstname'] = \join(' ', $parts);
    
    // Removing the original name field
    unset($record['name']);
    return $record;
}, $data);

$newData = \array_filter($newData); // removing false values, for when there's no name in the record

如果您对从数据库中选择进行拆分,您可能会获得更好的性能。

【讨论】:

  • 这是我目前正在尝试的(抱歉我看不到如何格式化 cmets):foreach ($authors as $author) { $parts = explode(' ',$author['name']); $lastname = array_pop($parts); $authors['lastname'] = $lastname; } var_dump($authors);die(); 但 var_dump 显示的数组没有添加元素
【解决方案2】:

我相信我已经解决了这个问题 - 主要是通过反复试验!该方法现在看起来像这样:

$authors = $this->author_model->get('name');
        $authors_sort = array();
        foreach ($authors as $author) {
            $parts = explode(' ',$author['name']);
            $lastname = array_pop($parts);
            $author['lastname'] = $lastname;
            $authors_sort[] = $author;
        }
        return $authors_sort;

并且完全按照我的意愿行事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多