创建动态关联数组

时间:2012-08-03 17:50:21

标签: php

所以我基本上创建了这个数组,将索引数组转换为assoc数组。

说这是我的输入数组

$input = array('this is the title','this is the author','this is the location','this is the quote');

这是我的功能

function dynamicAssocArray($input)
{
    $result = array();
    $assocArrayItems = array('title', 'author', 'location', 'quote');
    $assocItem;

    foreach ($input as $value)
    {
        for ($i=0; $i <= 3; $i++)
        {
            $assocItem = $assocArrayItems[$i];
        }
        $result = $result[$assocItem] = $value;
    }
    return $result;
}

我收到此错误“警告:非法字符串偏移'引用'”,输出为字符串(1)“t”

我完全不明白,所以任何帮助都会非常感激。

3 个答案:

答案 0 :(得分:2)

您不必在php中启动变量,这会使行$assocItem;变得毫无意义。 下面的代码可以解决问题。

function dynamicAssocArray($input)
{
    $result = array();
    $assocArrayItems = array('title', 'author', 'location', 'quote');

    foreach ($input as $i => $value)
    {
        $assocItem = $assocArrayItems[$i];
        $result[$assocItem] = $value;
    }
    return $result;
}

甚至更好地使用array_combine()

function dynamicAssocArray($input)
{
    $assocArrayItems = array('title', 'author', 'location', 'quote');
    $result = array_combine($assocArrayItems, $input);
    return $result;
}

答案 1 :(得分:1)

你是

  1. 四次覆盖$assocItem(仅留下最后一个值)
  2. $value分配给您的$result数组(使其成为字符串)。
  3. 你真的需要循环吗?只有四个值,更容易明确地写出来:

    function dynamicAssocArray($input)
    {
        return array(
          'title' => $input[0],
          'author' => $input[1],
          'author' => $input[2],
          'quote' => $input[3]
        );
    }
    

    或者,正如deceze将其放在评论主题中:只需使用内置array_combine函数

答案 2 :(得分:1)

试试这个

function dynamicAssocArray($input)
{
    $result = array();
    $assocArrayItems = array('title', 'author', 'location', 'quote');
    $assocItem;


        for ($i=0; $i <= 3; $i++)
        {
            $assocItem = $assocArrayItems[$i];
            $result[$assocItem] = $input[$i];
        }


    return $result;
}

echo "<pre>";
print_r(dynamicAssocArray($input));

输出

Array
(
    [title] => this is the title
    [author] => this is the author
    [location] => this is the location
    [quote] => this is the quote
)