PHP: взорвать массив и использовать каждое значение массива несколько раз

Я хочу добиться следующего:

преобразовать массив:

['A','B','C'];

в строку вроде:

"A is A, B is B, C is C"

Есть ли другой способ, кроме цикла foreach (например, взрыва), чтобы достичь этого?

5 ответов

Если вы не хотите проходить, вы можете использовать функцию array_walk().

Попробуй это:

$input = ['A','B','C'];

function test_alter(&$item, &$key) {
    $item = $item.' is '.$item;
}
array_walk($input, 'test_alter');
echo implode(', ', $input);

Выход:

A is A, B is B, C is C
$arr = ['A','B','C'];

function myfunction($arr)
{
    return "$arr is $arr";
}

print_r(array_map("myfunction",$arr));
//[0] => A is A [1] => B is B [2] => C is C 

Вот моя рекомендация, так как вы привыкли использовать implode в php, я написал вам дублирующую функцию, которая принимает элемент форматирования в вашем разделителе. Куда бы вы ни поместили%x, он будет дублировать ключ массива следующим образом:

echo implodeDuplicate(" is %x, ", $myArray);

при условии, что $myArray был:

$myArray = array(1,2,3,4);

это выведет:

1 is 1, 2 is 2, 3 is 3, 4 is 4,

Вот функция:

function implodeDuplicate($seperator, $array) {
    $finalString = "";
    for($i = 0; $i < count($array); $i++) {
        $trueSep = str_replace("%x", $array[$i], $seperator);
        $finalString .= $array[$i] . $trueSep;
    }
    return $finalString;
}

Надеюсь, это полезно!:)

Использовать ниже путь с array_walk

$arr = ['A','B','C'];
function _print($item2, $key)
{
    echo "$item2 is $item2, ";
}
array_walk($arr, '_print');

или, если необходимо сохранить в строке, используйте ниже

    $arr = ['A','B','C'];
    $str = '';
    function _print($item2, $key)
    {
        global $str;
        $str = $str."$item2 is $item2, ";
    }
    array_walk($arr, '_print');
    echo trim($str,',');

Я вижу array_map() а также array_walk() решения, но никто не разместил array_reduce() метод, так что я буду для полноты.

Для небольших массивов (требуется несколько итераций), array_map() будет выполняться чуть-чуть быстрее (ваши пользователи никогда не заметят разницы).

По мере увеличения размера входного массива array_reduce() берет на себя инициативу и дистанцируется от array_map(), Сделайте свои собственные тесты с вашими собственными реальными данными, если вам нужно выполнить микрооптимизацию.

Мой следующий метод не нужен implode() так как array_reduce() выводит строку, однако для каждой итерации требуется условие, чтобы избежать "чрезмерного склеивания".

Код: ( Демо)

$input=['A','B','C'];
echo array_reduce($input,function($carry,$v){return ($carry?"$carry, ":'')."$v is $v";});

Выход:

A is A, B is B, C is C
Другие вопросы по тегам