2016-04-28 16 views
0

私は、このようなオブジェクトの「$ ARR」の配列を持っている:ランキング配列ベース

Array 
(
    [0] => stdClass Object 
     (
      [1] => 1 
     ) 

    [1] => stdClass Object 
     (
      [0] => 1 
     ) 

    [2] => stdClass Object 
     (
      [4] => 2 
     ) 

    [3] => stdClass Object 
     (
      [3] => 2 
     ) 

    [4] => stdClass Object 
     (
      [2] => 3 
     ) 

) 

私が何をしたいのかがキーに基づいて値をランク付けです。もしキー($ [$ idxを+ 1] ARR)<キー($ [$ idxを] ARR)そのように結果は次のようになり1で$ [IDX] ARRの価値を高める:

Array 
(
    [0] => stdClass Object 
     (
      [1] => 2 
     ) 

    [1] => stdClass Object 
     (
      [0] => 1 
     ) 

    [2] => stdClass Object 
     (
      [4] => 5 
     ) 

    [3] => stdClass Object 
     (
      [3] => 4 
     ) 

    [4] => stdClass Object 
     (
      [2] => 3 
     ) 

) 

これは私がこれまで行ってきた:

$arrIdx2=[]; 
foreach($arrIdx as $key=>$value){ 
    $newVal = new stdClass(); 
    $newVal->$key = $value; 
    $arrIdx2[] = $newVal; 
} 

foreach($arrIdx2 as $key=>$value){ 
    $i= key((array)$value); 
    $m = $value->$i; //get the first value 
    for($j = $key+1; $j< $len; $j++){ 
     $i2 = key((array)$arrIdx2[$j]); //get the key of second value 
     $n = $arrIdx2[$j]->$i2; 
     if($n == $m){ 
      if($i2 < $i){ 
      $arrIdx2[$key]->$i += 1; 
      } 
     } 
    } 
} 

、これは私が得た結果である:

Array 
(
    [0] => stdClass Object 
     (
      [1] => 2 
     ) 

    [1] => stdClass Object 
     (
      [0] => 1 
     ) 

    [2] => stdClass Object 
     (
      [4] => 3 
     ) 

    [3] => stdClass Object 
     (
      [3] => 2 
     ) 

    [4] => stdClass Object 
     (
      [2] => 3 
    ) 

) 

これを行うための最善の方法は何ですか?誰も私を導くことができますか?ありがとう

+0

'key($ arr [$ idx + 1])

答えて

0

これを連想配列で行います。私はオブジェクト配列 を今作成することはできません。あなたが私にオブジェクト配列を提供すれば私は私の答えを更新するでしょう。

これを試してみてください:

$arr = array(
      array("1" => 1), 
      array("0" => 1), 
      array("4" => 2), 
      array("3" => 2), 
      array("2" => 3) 
     ); 

$out = array(); 
$first = key(current($arr)); 
$end = key(end($arr)); 
foreach($arr as $key => $val){ 
    $comp = (key($val) == $end) ? $end : key($arr[$key+1]); 

    if($comp <= key($val)) 
     $out[$key][key($val)] = key($val) + 1; 
    else 
     $out[$key][key($val)] = $val[key($val)]; 
} 

echo '<pre>'; 
print_r($out); 

結果

Array 
(
    [0] => Array 
     (
      [1] => 2 
     ) 

    [1] => Array 
     (
      [0] => 1 
     ) 

    [2] => Array 
     (
      [4] => 5 
     ) 

    [3] => Array 
     (
      [3] => 4 
     ) 

    [4] => Array 
     (
      [2] => 3 
     )  
) 

私はあなたがこれをしたいと思う、私に知らせてください。

+0

こんにちは、私は本当にあなたの答え@FrayneKonokに感謝します。しかし、私が望むのは、実際にはそれぞれの "内部"配列のキー内部を比較することです。例: 'key($ arr [0])= 1'と' key($ arr [1])= 0'です。次に、 '$ arr [1] [0] <$ arr [0] [1]'の値は '$ arr [0] [1]'の値を1だけ増やします。 1] = 2'となり、配列の残りの部分についてはこれを欲しがります。 – zangetsKid

+0

最後のインデックスについて –

+0

最後のインデックスは配列の前のエントリもチェックする必要がありますので、配列全体に一意の値が含まれるようにしてください。私はこれを行う方法がわかりません。これを再帰的に行う方法はありますか? – zangetsKid