如何将 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 数组列拆分为两个的主要内容,如果未能解决你的问题,请参考以下文章