0

私は次の問題を抱えています。1/2/3/4/5/6 という数字があり、それらを 1/3/5 と 2/4/6 の 2 つのグループに分けたいと考えています。選択は、ポジションに基づいて行う必要があります。この部分は正常に動作します。内破機能を使用するときに、それらを再度グループ化するときに問題が発生します。格納された最後の番号のみが表示されます。この表記法を使用していることに関係があることはわかっています (分類する数値の量が毎回異なるため、この方法を選択しました)。

$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);
?>

4

3 に答える 3

1

私はそれが思われる問題を読み間違えました。代わりに、この最適化を行います。

$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";
于 2009-10-28T23:07:22.293 に答える
0

彼らの立場に基づいて?それで、配列内のインデックスの均一性/奇数性に基づいて分割しますか?

このようなもの?

<?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 );
}
于 2009-10-28T23:07:18.410 に答える
0

%ループ インデックスを使用して、配列をグループに分割できます。各グループを別々の配列に入れます。次に例を示します。

<?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);
?>
于 2009-10-28T22:50:13.797 に答える