-1

所以基本上我创建了这个数组来将索引数组转换为 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;
}

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

我完全不明白,所以任何帮助将不胜感激。

4

3 回答 3

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;
}
于 2012-08-03T17:58:40.317 回答
1

你是

  1. 覆盖$assocItem四次(只留下最后一个值)
  2. 分配$value给您的$result数组(使其成为字符串)。

你真的需要循环吗?只有四个值,更容易明确地编写它:

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

或者,正如deceze在评论线程中所说:只需使用内置array_combine函数

于 2012-08-03T17:58:35.500 回答
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
)
于 2012-08-03T18:02:46.233 回答