使用implode对while循环中获取的信息进行分组
-
08-07-2019 - |
题
我遇到以下问题。我有1/2/3/4/5/6的数字,我想将它们分成两组1/3/5和2/4/6。选择必须根据位置进行。这部分工作正常。当我使用implode函数时,我想再次对它们进行分组时出现问题;它只能看到存储的最后一个数字。我知道这与我使用这种符号有关(我选择这种方式,因为每次分类的数量都不一样):
$q++;
$row0 = $row0 + 2;
$row1 = $row1 + 2;
但是我无法想办法修复它或以其他方式获得相同的结果。希望有人能指出我正确的方向。我在下面留下了完整的代码。
<?
$string = "1/2/3/4/5/6";
$splitted = explode("/",$string);
$cnt = count($splitted);
$q=0;
$row0=0;
$row1=1;
while($cnt > 2*$q)
{
$p_row = implode(array($splitted[$row0]));
echo "$p_row <br>";
$i_row = implode(array($splitted[$row1]));
echo "$i_row <br>";
$q++;
$row0 = $row0 + 2;
$row1 = $row1 + 2;
}
$out = "implode(',', $i_row)";
var_dump($out);
?>
解决方案
您可以使用循环索引上的%
将数组拆分为组。将每个组放在单独的数组中。这是一个例子:
<?php
$string = "1/2/3/4/5/6";
$splitted = explode("/",$string);
$group_odd = array(); ## all odd elements of $splitted come here
$group_even = array(); ## all even elements of $splitted come here
for ($index = 0; $index < count($splitted); ++$index) {
## if number is divided by 2 with rest then it's odd
## but we've started calculation from 0, so we need to add 1
if (($index+1) % 2) {
$group_odd[] = $splitted[$index];
}
else {
$group_even[] = $splitted[$index];
}
}
echo implode('/', $group_odd), "<br />"; ## outputs "1/3/5<br />"
echo implode('/', $group_even), "<br />"; ## outputs "2/4/6<br />"
print_r($group_odd);
print_r($group_even);
?>
其他提示
我想念它看起来的问题。相反,我给出了这个优化。
$string = "1/2/3/4/5/6";
$splitted = explode("/", $string);
$group = array();
for ($index = 0, $t = count($splitted); $index < $t; ++$index) {
$group[$index & 1][] = $splitted[$index];
}
$oddIndex = $group[0]; //start with index 1
$evenIndex = $group[1]; //start with index 2
echo "odd index: "
. implode('/', $oddIndex)
. "\neven index: "
. implode('/', $evenIndex)
. "\n";
根据他们的立场?那么,根据数组中索引的均匀性/奇数进行拆分?
这样的东西?
<?php
$string = "1/2/3/4/5/6";
list( $evenKeys, $oddKeys ) = array_split_custom( explode( '/', $string ) );
echo '<pre>';
print_r( $evenKeys );
print_r( $oddKeys );
function array_split_custom( array $input )
{
$evens = array();
$odds = array();
foreach ( $input as $index => $value )
{
if ( $index & 1 )
{
$odds[] = $value;
} else {
$evens[] = $value;
}
}
return array( $evens, $odds );
}
不隶属于 StackOverflow