【发布时间】:2012-08-08 15:43:59
【问题描述】:
我陷入了数组操作任务。
场景:
我有一个对象数组。示例:
Array(
[0] => stdClass Object(
['foo'] => 'foo1',
['bar'] => 'bar1',
['baz'] => 'baz1'
),
[1] => stdClass Object(
['foo'] => 'foo2',
['bar'] => 'bar2',
['baz'] => 'baz2'
),
[2] => stdClass Object(
['foo'] => 'foo3',
['bar'] => 'bar3',
['baz'] => 'baz3'
)
)
我必须把它转换成这种形式:
Array(
['foo1'] => Array('bar1', 'baz1'),
['foo2'] => Array('bar2', 'baz2'),
['foo3'] => Array('bar3', 'baz3'),
)
这是我为实现此目的而创建的函数:
function createAttributeString($attributes)
{
$finalString = '';
$string = array();
$column = array();
foreach( $attributes as $attrib )
{
if( $attrib->primary_key == '1' )
$column[$attrib->name] = array("'$attrib->type'", "'$attrib->max_length'", '\'pk\'');
else
$column[$attrib->name] = array("'$attrib->type'", "'$attrib->max_length'");
$string[$attrib->name] = 'array('.implode(',', $column[$attrib->name]).')';
}
$finalString = 'array('.implode(',', $string).')';
return $finalString;
}
但是这个函数的输出是:
Array(
[0] => Array('bar1', 'baz1'),
[1] => Array('bar2', 'baz2')
[2] => Array('bar3', 'baz3')
)
我知道这是因为我在 $finalString 中使用的最后一个内爆函数,但我不明白应该使用什么来获得我想要的输出。
任何帮助或建议将不胜感激。
更新:
最终的数组应该以字符串格式返回。
【问题讨论】:
-
您是否想弄清楚如何将最终数组的元素名称从 0、1、2 重命名为 foo1、foo2、foo3?
-
如果你在做 $attrib->primary_key 那么你的 $attributes 不是一个数组数组,而是一个对象数组,和你展示的不太一样
-
你可以遍历数组,然后对于每个条目 array_shift() 关闭第一个元素并将其用作键,然后内容是余数的 array_values()。
-
哦,是的,这是我的错误,它实际上是一个对象......
-
你能把输入数据重写为对象而不是数组,这样我们就可以看到结构了吗?另外,您需要获取数组还是将其转换为纯字符串?