PHP, как вырезать массив и добавить к нему другой характер

У меня есть массив, как:

Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
[6] => g
[7] => h
)

И я хочу добавить точку с запятой(;) каждое значение индекса 3, и это читается из конца массива, что результат в виде строки "ab;cde;fgh";

2

Решение

Вот забавный и неприятный однострочник:

$str = ltrim(strrev(chunk_split(implode(array_reverse($arr)), 3, ';')), ';');

Пример:

$arr = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
$str = ltrim(strrev(chunk_split(implode(array_reverse($arr)), 3, ';')), ';');
echo $str; //ab;cde;fgh

// More sample output based on different input arrays:
$arr = array('a', 'b', 'c', 'd', 'e'); //ab;cde
$arr = array('a', 'b', 'c', 'd', 'e', 'f'); //abc;def
$arr = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'); //ab;cde;fgh;ijk

Посмотреть демо

1

Другие решения

Это странный способ, но, так как вы хотите, чтобы это было наоборот, вам, возможно, придется использовать некоторую функцию здесь:

$array = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
$array = array_reverse($array); // reverse it
$array = array_chunk($array, 3); // cut by threes
$string = '';
foreach ($array as $value) {
$string .= implode($value); // glue them
if(count($value) == 3) { // if still three, add a semi
$string .= ';';
}
}
$string = strrev($string); // then reverse them again
echo $string; // ab;cde;fgh
1

Это работает … есть несколько разных способов сделать это. Это был самый быстрый способ избавиться от моей головы без использования второго массива.

$vars = array("a","b","c","d","e","f","g","h");
print_r(insert_char($vars));

function insert_char($Array, $Delimeter=";", $Count=3) {
for ($i = sizeOf($Array) - $Count; $i > 0; $i -= $Count)
array_splice($Array, $i, 0, $Delimeter);

return implode($Array);
}

Результат

ab;cde;fgh
1

Вот мое решение, хотя оно кажется неэффективным, но оно довольно ясно:

<?php
$myarr=Array('a','b','c','d','e','f','g','h');
$newarr=Array();
$arrsize = sizeof($myarr);
for ($x = 0, $i = 0; $x < $arrsize; $x++, $i++) {
$newarr[$i] = $myarr[$arrsize - $x - 1];
if (($arrsize - $x) % 3 == 0) {
$i++;
$newarr[$i] = ";";
}
}
$newarr = array_reverse($newarr);
print_r($newarr);
?>
0

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

$vars = array("a","b","c","d","e","f","g");
$c = 0; $s = "";
for ($i = sizeof($vars)-1; $i >= 0; $i--)
{
$c++;
$s = $vars[$i].$s;
if ($c == 3) { $c = 0; $s = ";".$s; }
}

echo $s;
0
По вопросам рекламы [email protected]