我试图连接数组键(最初是类属性)。所以我做的是:
echo '<pre>'.print_r(array_keys(get_object_vars($addressPark)),TRUE).'</pre>';
输出:
Array
(
[0] => streetAddress_1
[1] => street_address_2
[2] => city_name
[3] => subdivision_name
[4] => country_name
)
这就是我获取AddressPark
对象属性名称的方式。
$arr = array_keys(get_object_vars($addressPark));
$count = count($arr);
我想通过索引访问对象属性,这就是我使用array_keys的原因。
$props = str_repeat("{$arr[$count-$count]},",$count-2).$arr[$count-1];
echo $props;
结果是:
streetAddress_1,streetAddress_1,streetAddress_1,COUNTRY_NAME
重复$arr[0] = 'streetAddress_1'
这是正常的,因为在str_repeat
的每个循环中$arr
的索引都是$count-$count = 0
。
所以我真正希望str_repeat
做的是每个循环:$count-($count-0),$count-($count-1)
... $count-($count-4)
。不使用任何其他循环来将值从(0增加到4)递增。
那还有另一种方法吗?
答案 0 :(得分:0)
否,您不能直接使用str_repeat
函数将数组中的每个值复制到字符串中。但是,有许多方法可以实现这一点,其中最流行的是implode()
和array_keys
函数。
array_keys
从数组中提取键。以下示例将仅关注问题的另一部分,即连接数组的值。
implode:用字符串连接数组元素
string implode ( string $glue , array $pieces )
示例:
<?php
$myArray = ['one','two','three'];
echo implode(',', $myArray);
// one,two,three
echo implode(' Mississippi;', $myArray);
// one Mississippi; two Mississippi; three Mississippi;
foreach:foreach构造提供了一种简单的方法来遍历数组,对象或可遍历。
foreach (array_expression as $key => $value)
...statement...
示例:
<?php
$myArray = ['one','two','three'];
$output = '';
foreach ($myArray as $val) {
$output .= $val . ',';
}
echo $output;
// one,two,three,
请注意,在此版本中,我们还有一个逗号要处理
<?php
echo rtrim($output, ',');
// one,two,three
list:将变量分配为数组
array list ( mixed $var1 [, mixed $... ] )
示例:
<?php
$myArray = ['one','two','three'];
list($one, $two, $three) = $myArray;
echo "{$one}, {$two}, {$three}";
// one, two, three
请注意,在此版本上,您必须知道要处理多少个值。
array_reduce:使用回调函数将数组迭代地减少为单个值
mixed array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] )
示例:
<?php
$myArray = ['one', 'two', 'three'];
echo array_reduce($myArray, function ($carry, $item) {
return $carry .= $item . ', ';
}, '');
// one, two, three,
此方法还会导致出现一个多余的逗号。
while:while循环是PHP中最简单的循环类型。
while (expr)
...statement...
示例:
<?php
$myArray = ['one', 'two', 'three'];
$output = '';
while (!empty($myArray)) {
$output .= array_shift($myArray);
$output .= count($myArray) > 0 ? ', ' : '';
}
echo $output;
// one, two, three
请注意,我们已经在循环中处理了错误的逗号。当我们更改原始数组时,此方法具有破坏性。
sprintf:实际使用str_repeat
函数的最佳尝试:
<?php
$myArray = ['one','two','three'];
echo rtrim(sprintf(str_repeat('%s, ', count($myArray)), ...$myArray), ', ');
// one, two, three
请注意,它使用splat运算符...
来将数组解压缩为sprintf
函数的参数。
可能还有更多的方法,实际上我可以想到更多;使用引用的变量使用array_walk
,array_map
,iterator_apply
和call_user_func_array
之类的数组迭代器。
如果您还想在下面发表评论:-)