2

「while」ループで作成された、mysqlテーブルからのクエリの結果として作成された配列のセットがあります。

while ($row = mysql_fetch_array($result)) {
    $k_id =  $row['kw'];
    $path[$level] = $k_id;

    if(array_search('7', $path)) {
        $it = new CachingIterator(new ArrayIterator($path));
        $t1 = array();
        foreach ( $it as $v ) {
            $var = array("no" => $v,"to" => 0);
            if ($it->hasNext()) {
                $var["to"] = $it->getInnerIterator()->current();
            }
            $t1[] = $var;
        }

        extract($t1, EXTR_PREFIX_ALL, "t1");

        for ($i = 0; $i < sizeof($t1); $i++) {
            $dmp = print_r($t1[$i], result);
            echo $dmp."<br />";
        }
    }     
}

echo $ dmpの結果は、配列のセットです。

Array ( [no] => 2 [to] => 1 )
Array ( [no] => 1 [to] => 4 )
Array ( [no] => 4 [to] => 7 )
Array ( [no] => 7 [to] => 0 )
Array ( [no] => 2 [to] => 1 )
Array ( [no] => 1 [to] => 5 )
Array ( [no] => 5 [to] => 7 )
Array ( [no] => 7 [to] => 0 )
Array ( [no] => 2 [to] => 1 )
Array ( [no] => 1 [to] => 6 )
Array ( [no] => 6 [to] => 7 )
Array ( [no] => 7 [to] => 0 )
Array ( [no] => 2 [to] => 1 )
Array ( [no] => 1 [to] => 3 )
Array ( [no] => 3 [to] => 7 )
Array ( [no] => 7 [to] => 0 )

私の質問は、同じ「no」キー値を持つ配列をマージする方法です


mysql_fetchの前のVar_dump:

array(0) { } array(1) { [0]=> string(1) "2" } array(2) { [0]=> string(1) "2" [1]=> string(1) "1" } array(3) { [0]=> string(1) "2" [1]=> string(1) "1" [2]=> string(1) "4" }

結果として、配列を取得したいので、次のコードから簡単にそのようなコードを作成できます。

 "nodeTo": "4", 
    "nodeFrom": "1"

"nodeTo": "5", 
    "nodeFrom": "1"

"nodeTo": "6", 
    "nodeFrom": "1"

"nodeTo": "3", 
    "nodeFrom": "1"

    "id": "1"
4

3 に答える 3

0

交換できます

 $t1[] = $var;

$t1[$v][] = $var;

IDに基づいてグループ化されます...結果を出力する方法の例:

foreach ( $t1 as $no => $group ) {
    echo "Merge $no <br />" ;
    foreach ( $group as $list ) {
        var_dump($list);
    }
}
于 2013-02-09T16:20:27.217 に答える
0

SQLから結果をフェッチするときは、正しい配列構造を直接作成することをお勧めします。これにより、追加のforeachループが節約されます。

完全を期すために、私はあなたのために例を用意しました、あなたがあなたが想定したようにそれをどのように行うことができるか:(楽しみのために;))

$a = array (
    array ('no' => 2, 'to' => 1), //  |___ will be merged
    array ('no' => 2, 'to' => 1), //  |
    array ('no' => 2, 'to' => 2),
    array ('no' => 3, 'to' => 2)
);

$result = array();
foreach($a as $item) {
    if(!array_key_exists($item['no'], $result)) {
        $result[$item['no']] = array($item['to']);
    } else if(!in_array($item['to'], $result[$item['no']], TRUE)) {
        $result[$item['no']][] = $item['to'];
    }
}

// get all to values with no=2 :
$elements = $result[2];

変換後の結果配列のvar_dumpは、何が起こっているのかを理解するのに役立つ場合があります。

//
var_dump($result);

/* Output:

array(2) {
  [2] =>  <---- 'no' value as index
  array(2) {
    [0] =>    -
    int(1)     |__ different 'to' values
    [1] =>     |
    int(2)    -
  }
  [3] => <---- 'no' value as index
  array(1) {
    [0] =>
    int(2)   <------ 'to' value for 'no'==3
  }
}

*/

私が言ったように、SQLから結果をフェッチするときは、この配列構造を直接作成する必要があります。残念ながら、その内容$pathがなければ、どうやってこれを達成するかは言えません。

于 2013-02-09T16:26:21.730 に答える
0
foreach ($t1 as $dmp) {
    $combined[$dmp["no"]][] = $dmp["to"];
}

結果:

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

    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
            [3] => 3
        )

    [4] => Array
        (
            [0] => 7
        )

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

    [5] => Array
        (
            [0] => 7
        )

    [6] => Array
        (
            [0] => 7
        )

    [3] => Array
        (
            [0] => 7
        )

)
于 2013-02-09T16:28:25.463 に答える