假设我有一个这样的数组,它可能是多维的,所以我需要使这个循环递归。
我认为我很接近但不能完全看出我错在哪里。
[
{ "value": "rigging" },
{ "value": "animation" },
{ "value": "modeling" }
]
function _replace_amp($post = array()) {
foreach($post as $key => $value)
{
if (is_array($value)) {
$b = $this->_replace_amp($value);
} else {
$b .= $value . ', ';
}
}
return $b;
}
预期结果应为:
"rigging, animation, modeling"
我只是“建模”,
答案 0 :(得分:1)
在您的代码中,您需要编写
$b .= $this->_replace_amp($value); // note the period
如果没有句点,则每次脚本找到新数组时都会发起$b
,但您希望将结果追加到$b
。
除此之外,还有一个很好的内存函数可供多维数组使用:
/**
* Recursively implodes an array with optional key inclusion
*
* Example of $include_keys output: key, value, key, value, key, value
*
* @access public
* @param array $array multi-dimensional array to recursively implode
* @param string $glue value that glues elements together
* @param bool $include_keys include keys before their values
* @param bool $trim_all trim ALL whitespace from string
* @return string imploded array
*/
function recursive_implode(array $array, $glue = ',', $include_keys = false, $trim_all = true)
{
$glued_string = '';
// Recursively iterates array and adds key/value to glued string
array_walk_recursive($array, function($value, $key) use ($glue, $include_keys, &$glued_string)
{
$include_keys and $glued_string .= $key.$glue;
$glued_string .= $value.$glue;
});
// Removes last $glue from string
strlen($glue) > 0 and $glued_string = substr($glued_string, 0, -strlen($glue));
// Trim ALL whitespace
$trim_all and $glued_string = preg_replace("/(\s)/ixsm", '', $glued_string);
return (string) $glued_string;
}
答案 1 :(得分:0)
我认为json_encode(your_php_array)或serialize()函数可以帮助你。
答案 2 :(得分:0)
您想使用函数implode()。无需重新发明轮子。
<?php
$arr = ['one', 'two', 'three'];
echo implode(',', $arr); // one, two, three
答案 3 :(得分:0)
$ b = $ this-&gt; _replace_amp($ value);将此行更改为$ b。= $ this-&gt; _replace_amp($ value); 这个答案按照您的编码
[
{ "value": "rigging" },
{ "value": "animation" },
{ "value": "modeling" }
]
function _replace_amp($post = array()) {
foreach($post as $key => $value)
{
if (is_array($value)) {
$b .= $this->_replace_amp($value);
} else {
$b .= $value . ', ';
}
}
return $b;
}
使用已使用implode(',',$array);