索引数组中的 PHP 关联数组

标签 php arrays associative-array

我有一个$string:

'Name   Height  Weight
 John   177     142
 Jill   156     123
 Jacob  183     157'

我正在将其转换为具有以下结构的 $array:

Array (
    [0] => Array (
        ['Name'] => 'John'
        ['Height'] => '177'
        ['Weight'] => '142'
    )
    [1] = > Array (
        ['Name'] => 'Jill'
        ['Height'] => '156'
        ['Weight'] => '123'
    )
    [2] = > Array (
        ['Name'] => 'Jacob'
        ['Height'] => '183'
        ['Weight'] => '157'
    )
)

使用以下代码:

$rows = explode("\n",$string); //creates an indexed array of rows as strings
$headers = explode("\t",$rows[0]); //creates an indexed array of headers as strings
$rows = array_slice($rows,1); //removes headers from $rows
$array = Array();
foreach($rows as $row) {
    $array[] = array_combine($headers, explode("\t",$row)); //creates associative arrays for each row
}

但是,我无法访问索引 $array 中的关联数组

例如,这不起作用:

echo $array[0]['Name'];

即使 echo implode(', ', array_keys($array[0])); 给出:

Name, Height, Weight

我尝试了许多不同的方法来访问索引数组中的关联数组,但没有成功。我做错了什么?

编辑:

所以,

$string = "Name Height  Weight
John    177 142
Jill    156 123
Jacob‌​ 183 157";

没有效果,但是

$string = "Name\tHeight\tWeight\nJohn\t177\t142\nJill\t156\t123\nJacob‌​‌​\t183\t157";

有没有...

所以我想问题是:有什么区别?我如何将前一个字符串解释为后者?

最佳答案

您的代码不会生成该数组结构,但可以像这样修复它:

$string = 'Name   Height  Weight
 John   177     142
 Jill   156     123
 Jacob  183     157';

$rows = explode("\n",$string); //creates an indexed array of rows as strings

$headers = preg_split("#\s+#",trim($rows[0], "\n\r\t ")); //creates an indexed array of headers as strings, by splitting by any white space
var_dump($headers);

$rows = array_slice($rows,1); //removes headers from $rows
$array = Array();
foreach($rows as $row) {
    $array[] = array_combine($headers, preg_split("#\s+#",trim($row, "\n\r\t "))); //creates associative arrays for each row, by splitting by any white space
}

var_dump($array);

这会产生输出:

array(3) {
  [0]=>
  string(4) "Name"
  [1]=>
  string(6) "Height"
  [2]=>
  string(6) "Weight"
}
array(3) {
  [0]=>
  array(3) {
    ["Name"]=>
    string(4) "John"
    ["Height"]=>
    string(3) "177"
    ["Weight"]=>
    string(3) "142"
  }
  [1]=>
  array(3) {
    ["Name"]=>
    string(4) "Jill"
    ["Height"]=>
    string(3) "156"
    ["Weight"]=>
    string(3) "123"
  }
  [2]=>
  array(3) {
    ["Name"]=>
    string(5) "Jacob"
    ["Height"]=>
    string(3) "183"
    ["Weight"]=>
    string(3) "157"
  }
}

主要思想是您必须用任何额外的空格修剪每行字符串并按最长的空格序列拆分。

关于索引数组中的 PHP 关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42802897/

相关文章:

php - 使用 php 在 MySql 中构建查询

javascript - 如何动态添加输入字段和子字段

php - 如果不在其他数组中,则从数组中删除值,但保持相同的顺序

arrays - Bash,调用值时使用变量作为关联数组的名称

PHP 通过 VPN 发布数据

php - 使用 Node.js 在 PHP 应用程序中显示消息的实时通知

javascript - 创建系统为 3 名员工提供积分,每次我单击其中一个按钮时,我都会为所选用户提供 1 分 -

c# - 从 String textBox 到 hex 0x byte[] c#

php - 从 PhP 到 Python 的飞跃

php - 我可以将关联数组发送到包含的 Twig 模板中吗?