如何使用str_repeat从数组中重复一个字符串,并给出str_repeat每次循环的索引


How to use str_repeat to repeat a string from an array giving an index of each loop of the str_repeat

我试图连接数组键(原来是一个类属性)。我所做的是:

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。

那么还有别的方法吗?

不能,不能直接使用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结构提供了一种简单的方法来遍历数组、对象或可遍历对象。

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 and String Repeat

sprintf:我实际使用str_repeat函数的最佳尝试:

<?php
$myArray = ['one','two','three'];
echo rtrim(sprintf(str_repeat('%s, ', count($myArray)), ...$myArray), ', ');
// one, two, three

注意,这里使用splat操作符...来解包数组,作为sprintf函数的参数。


显然,这些例子中有很多不是最好的或最快的,但有时跳出常规思维是件好事。

可能有更多的方法,我实际上可以想到更多;

使用引用变量使用array_walkarray_mapiterator_applycall_user_func_array等数组迭代器。

如果你能想到更多的,请在下面发表评论:-)