如何将 php 数组列拆分为两个

Posted

技术标签:

【中文标题】如何将 php 数组列拆分为两个【英文标题】:How can I split a php array column into two 【发布时间】: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 个空格的名称 【参考方案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;

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

【讨论】:

以上是关于如何将 php 数组列拆分为两个的主要内容,如果未能解决你的问题,请参考以下文章

vue.js - 如何将对象数组拆分为多个 div 列

如何在PHP中按字符将数组拆分为关联数组[重复]

PHP如何在变量中拆分数组

oracle 如何将一个字段里的值拆分为多个值显示出来

如何将数据集拆分为两个具有唯一和重复行的数据集?

如何将数据集拆分为两个具有唯一和重复行的数据集?