首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用str_repeat从数组中重复字符串,给出str_repeat的每个循环的索引

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

Stack Overflow用户
提问于 2016-10-06 17:21:03
回答 1查看 1.1K关注 0票数 0

我正在尝试连接数组键(这些键最初是类属性)。所以我做的是:

代码语言:javascript
复制
echo '<pre>'.print_r(array_keys(get_object_vars($addressPark)),TRUE).'</pre>';

产出:

代码语言:javascript
复制
Array
(
    [0] => streetAddress_1
    [1] => street_address_2
    [2] => city_name
    [3] => subdivision_name
    [4] => country_name
)

这就是我如何获得AddressPark对象的属性名称的方法。

代码语言:javascript
复制
$arr = array_keys(get_object_vars($addressPark));
$count = count($arr);

我想按索引访问对象属性,这就是我使用array_keys的原因。

代码语言:javascript
复制
$props = str_repeat("{$arr[$count-$count]},",$count-2).$arr[$count-1];
echo $props;

结果是:

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。

还有别的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-21 16:38:41

不,不能直接使用str_repeat函数将数组中的每个值复制到字符串中。然而,有很多方法可以实现这一点,其中最流行的是implode()array_keys函数。

array_keys从数组中提取密钥。下面的示例将仅集中于问题的另一部分,即连接数组的值。

内爆

内爆:用字符串连接数组元素

代码语言:javascript
复制
string implode ( string $glue , array $pieces )

示例:

代码语言:javascript
复制
<?php
$myArray = ['one','two','three'];

echo implode(',', $myArray); 
// one,two,three

echo implode(' Mississippi;', $myArray); 
// one Mississippi; two Mississippi; three Mississippi;

福拉赫

前程:foreach构造为迭代数组、对象或可遍历提供了一种简单的方法。

代码语言:javascript
复制
foreach (array_expression as $key => $value)
    ...statement...

示例:

代码语言:javascript
复制
<?php
$myArray = ['one','two','three'];
$output = '';
foreach ($myArray as $val) {
    $output .= $val . ',';
}
echo $output;
// one,two,three,

注意,在这个版本中,我们需要处理一个额外的逗号。

代码语言:javascript
复制
<?php
echo rtrim($output, ',');
// one,two,three

列表

列表:将变量赋值,就像它们是数组一样

代码语言:javascript
复制
array list ( mixed $var1 [, mixed $... ] )

示例:

代码语言:javascript
复制
<?php
$myArray = ['one','two','three'];
list($one, $two, $three) = $myArray;
echo "{$one}, {$two}, {$three}";
// one, two, three

注意,在这个版本中,您必须知道要处理多少值。

阵列约简

reduce:使用回调函数迭代地将数组缩减为单个值

代码语言:javascript
复制
mixed array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] )

示例:

代码语言:javascript
复制
<?php
$myArray = ['one', 'two', 'three'];
echo array_reduce($myArray, function ($carry, $item) {
    return $carry .= $item . ', ';
}, '');
// one, two, three,

此方法还会导致出现一个额外的逗号。

:而循环是PHP中最简单的循环类型。

代码语言:javascript
复制
while (expr)
    ...statement...

示例:

代码语言:javascript
复制
<?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函数的最佳尝试:

代码语言:javascript
复制
<?php
$myArray = ['one','two','three'];
echo rtrim(sprintf(str_repeat('%s, ', count($myArray)), ...$myArray), ', ');
// one, two, three

注意,这使用飞溅运算符...将数组解压缩为sprintf函数的参数。

显然,这些例子中有很多不是最好的,也不是最快的,但有时候跳出框框是件好事。

可能还有更多的方法,实际上我可以想出更多的方法:使用引用的变量使用数组迭代器(如array_walkarray_mapiterator_applycall_user_func_array )。

如果你还能想出更多的评论的话:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39902121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档