如何在PHP中操作数组 [英] How to manipulate array in php
问题描述
我被困在数组操作任务中。
I am stuck in a array manipulation task.
场景:
我有一组对象。示例:
Scenario:
I have an array of Objects. Sample:
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'
)
)
我必须将其转换为以下形式:
I have to convert it into this form:
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中使用了最后一个内爆函数,但是我不明白我应该使用什么代替来获得所需的输出。
I know this is because of the last implode function that i have used in $finalString, but i dont understand what should i use instead to get my desired output.
任何帮助或建议将不胜感激。
Any help or suggestion would be highly appreciated.
更新:
最终数组应该以字符串格式返回。
UPDATE:
The final array should be return in a string format.
推荐答案
UPDATE 2
除了我之前发布的以下代码,您还可以使用以下代码以所需的形式漂亮地打印数组:
In addition to the code below I previously posted, you can use the following code to "pretty-print" your array in your desired form:
$s = "Array(" . "<br />";
foreach ($output as $key => $array) {
$s .= "['" . $key . "'] => Array('";
$s .= implode("', '", $array);
$s .= "')," . "<br />";
}
$s .= ")";
print $s;
将输出:
Array(
['foo1'] => Array('bar1', 'baz1'),
['foo2'] => Array('bar2', 'baz2'),
['foo3'] => Array('bar3', 'baz3'),
)
希望有帮助!
更新
更新问题后,提到数组由stdClass对象组成,我更新了与stdClass一起使用的代码,然后将输出存储在字符串变量中可以稍后打印:
After you updated the question, and mentioned that the array is consisting of stdClass objects, I have updated the code that works with stdClass and then stores the output in a string variable which can be printed later:
<?php
// Basic setup of test variables
$arr = array(
array("foo" => "foo1", "bar" => "bar1", "baz" => "baz1", "car" => "car1"),
array("foo" => "foo2", "bar" => "bar2", "baz" => "baz2", "car" => "car2"),
array("foo" => "foo3", "bar" => "bar3", "baz" => "baz3", "car" => "car3")
);
// array of objects
$arrObject = array();
// convert above array to an array of stdClass objects
foreach ($arr as $array) {
$object = new stdClass();
foreach ($array as $key => $value) {
$object->$key = $value;
}
$arrObject[] = $object;
}
// print to see if the array structure is the right one
print "<pre>";
print_r($arrObject);
print "</pre>";
// now the real code starts, assuming $arrObject is the input array you specified in your question
$output = array();
foreach ($arrObject as $a) {
$a = (array) $a;
$key = key($a);
next($a);
$output[$a[$key]] = array();
while (($key2 = key($a)) !== null) {
next($a);
$output[$a[$key]][] = $a[$key2];
}
}
$str = print_r($output, true);
print "<pre>";
print $str;
print "</pre>";
以上代码将在屏幕上显示以下输出:
The above code will print the following output on screen:
[input]
Array
(
[0] => stdClass Object
(
[foo] => foo1
[bar] => bar1
[baz] => baz1
[car] => car1
)
[1] => stdClass Object
(
[foo] => foo2
[bar] => bar2
[baz] => baz2
[car] => car2
)
[2] => stdClass Object
(
[foo] => foo3
[bar] => bar3
[baz] => baz3
[car] => car3
)
)
[output]
Array
(
[foo1] => Array
(
[0] => bar1
[1] => baz1
[2] => car1
)
[foo2] => Array
(
[0] => bar2
[1] => baz2
[2] => car2
)
[foo3] => Array
(
[0] => bar3
[1] => baz3
[2] => car3
)
)
这篇关于如何在PHP中操作数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!