0

繰り返して新しい配列を作成してみた次の配列があります。

array(233) {
  [0]=>
  array(2) {
    ["subject_id"]=>
    int(138)
    ["relatedsubject_id"]=>
    int(127)
  }
  [1]=>
  array(2) {
    ["subject_id"]=>
    int(138)
    ["relatedsubject_id"]=>
    int(47)
  }
  [2]=>
  array(2) {
    ["subject_id"]=>
    int(138)
    ["relatedsubject_id"]=>
    int(13)
  }
  [3]=>
  array(2) {
    ["subject_id"]=>
    int(138)
    ["relatedsubject_id"]=>
    int(56)
  }
  [4]=>
  array(2) {
    ["subject_id"]=>
    int(154)
    ["relatedsubject_id"]=>
    int(77)
  }
  [5]=>
  array(2) {
    ["subject_id"]=>
    int(154)
    ["relatedsubject_id"]=>
    int(69)
  }
  [6]=>
  array(2) {
    ["subject_id"]=>
    int(154)
    ["relatedsubject_id"]=>
    int(70)
  }
  [7]=>
  array(2) {
    ["subject_id"]=>
    int(154)
    ["relatedsubject_id"]=>
    int(75)

あまり不快にならないように短くカットしました。これは私が今使っているコードです:

    $subject_id = array();
    foreach ($results as $mainKey => $subArrays) {
        if(!isset($subject_id[$results[$mainKey]["subject_id"]])) {
            $subject_id[$results[$mainKey]["subject_id"]] = array();
            array_push($subject_id[$results[$mainKey]["subject_id"]], $results[$mainKey]["relatedsubject_id"]);
            // $subject_id[$results[$mainKey]["subject_id"]][] = $results[$mainKey]["relatedsubject_id"];
        }
    }

var_dump($subject_id);

私の結果は次のようになります。

array(111) {
  [138]=>
  array(1) {
    [0]=>
    int(127)
  }
  [154]=>
  array(1) {
    [0]=>
    int(77)
  }

値が1つしかない理由と、各「relatedsubject_id」が対応する「subject_id」と一致するように変更する方法についてのアイデアはありますか?ありがとうございました。

編集

期待される結果:

array {
      [138]=>
      array(1) {
        [0]=>
        int(127)
        [1]=>
        int(47)
        [2]=>
        int(13)
        [3]=>
        int(56)
      }
      [154]=>
      array(1) {
        [0]=>
        int(77)
        [1]=>
        int(69)
        [2]=>
        int(70)
        [3]=>
        int(75)
      }
4

1 に答える 1

1

サブジェクトIDとrelatedsubject_idsを統合しようとしているようです。その場合、これはあなたのために働くかもしれません。

    $subject_id = array();
    foreach ($results as $mainKey => $subArrays) {
      if(!isset($subject_id[$results[$mainKey]['subject_id']])) {
        $subject_id[$results[$mainKey]['subject_id']] = array('subject_id' => $results[$mainKey]['subject_id'], 'relatedsubject_id' => array());
      }
      $subject_id[$results[$mainKey]['subject_id']]['relatedsubject_id'][] = $results[$mainKey]["relatedsubject_id"];
    }

あなたの編集に変更されました

$subject_id = array();
foreach ($results as $mainKey => $subArrays) {
  if(!isset($subject_id[$results[$mainKey]['subject_id']])) {
    $subject_id[$results[$mainKey]['subject_id']] = array();
  } 
  $subject_id[$results[$mainKey]['subject_id']][] = $results[$mainKey]["relatedsubject_id"];
}

結果が1つしか得られなかった理由は、すべてのコードがif(!isset())関数に含まれているためです。それは一度だけ設定されるべきではありません。それが理にかなっている場合。

于 2013-02-18T21:14:00.300 に答える