2016-06-26 14 views
-1

Whileループから配列を取り込んでいますが、適切な配列形式を生成できません。私はさまざまなバリエーションを打ちましたが、私が探しているものは以下に含まれていません。Whileループから配列を正しく取り込む方法

array(3) { 
    ["[email protected]"]=> array(1) { ["userid"]=> string(1) "6" } 
    ["[email protected]"]=> array(1) { ["userid"]=> string(2) "64" } 
    ["[email protected]"]=> array(1) { ["userid"]=> string(3) "503" } 
} 

試み1:

$str = array(); 
while($userEmails = $query->fetch(PDO::FETCH_ASSOC)){ 

    $str[] = '"'.$userEmails['user_email'].'" => array( 
     "userid" => "'.$userEmails['user_id'].'" 
    )'; 
} 
$to = $str; 

試み1つの誤った配列:

目的は、変数 $to

理想の配列に見られるように、サードパーティのSMTPのためであります

array(3) { [0]=> string(54) ""[email protected]" => array("userid" => "6")" [1]=> string(54) ""[email protected]" => array("userid" => "64")" [2]=> string(54) ""[email protected]" => array("userid" => "503")" } 

試み2:

$str = ""; 
while($userEmails = $query->fetch(PDO::FETCH_ASSOC)){ 

    $str .= '"'.$userEmails['user_email'].'" => array("userid" => "'.$userEmails['user_id'].'")'; 
} 

$emails = rtrim($str, ", "); 

$to = array($emails); 

試み2誤った配列:

array(1) { 
    [0]=> string(162) ""[email protected]" => array("userid" => "6")"[email protected]" => array("userid" => "64")"[email protected]" => array("userid" => "503")" } 
+1

、あなたが最初に別々のステップとしてそれをすれば理解しやすいです上のマッピングのためにあるものですか? 1) '$ userEmail = $ userEmails ['user_email'];' 2) '$ userId = $ userEmails ['user_id'];'。ここからこれを行う方法はたくさんあります。3)(片方向:) $ str [] [$ userEmail] ['userid'] = $ userid; '。 –

答えて

1

あなたはこれが欲しい、私は思う:

$str = array(); 
while($userEmails = $query->fetch(PDO::FETCH_ASSOC)){ 
    $str[$userEmails['user_email']] = array(
     'user_id' => $userEmails['user_id'] 
    ); 
} 
0

は、この方法を試してみてください:

$str = array(); 
while($userEmails = $query->fetch(PDO::FETCH_ASSOC)){ 
    $str[$userEmails['user_email']] = array('userid' => $userEmails['user_id']); 
} 

$to = $str; 
+1

これは私が5分前に投稿したものです。 – rjdown

1

私は個人的にはwhilefetchを使用すると醜いコードを受け入れるようになると思います。私は通常今、あなたはこの

$result = query_reduce(function ($acc, $x) { 
    $acc[$x['user_email']] = [['user_id'] => $x['user_id']]; 
    return $acc; 
}, [], $query); 

var_dump($result); 

query_reduceはちょうど私が使用してヘルパーの一つです書くことができます

function query_reduce(callable $f, $initialValue, $query) { 
    $result = $initialValue; 
    while($x = $query->fetch(PDO::FETCH_ASSOC)) 
    $z = call_user_func($f, $x); 
    return $result; 
} 

より宣言コードを記述するためのユーティリティ関数のカップルを持っています。ここでforeach

// use like foreach 
function query_foreach(callable $f, $query) { 
    query_reduce(function($i, $x) { 
    call_user_func($f, $i++); 
    }, 0, $query); 
} 

// $query returns [{id:'a'}, {id:'b'}, {id:'c'}] 
query_foreach(function ($x, $i) { 
    echo "{$x['id']} is in position {$i}"; 
}); 

// output 
// a is in position 0 
// b is in position 1 
// c is in position 2 

のように動作します1またはクエリ芋

// use like array_map 
function query_map(callable $f, $query) { 
    $i = 0; 
    return query_reduce(function ($acc, $x) use ($i) { 
    return array_merge($acc, [call_user_func($f, $x, $i++)]); 
    }, [], $query); 
} 

// $query returns [{id:'a'}, {id:'b'}, {id:'c'}] 
$ids = query_foreach(function ($x, $i) { 
    return ['id'=> $x['id'], 'position'=> $i]; 
}); 

print_r($ids); 

// output... 
// Array 
// (
//  Array 
//  (
//   [id] => a 
//   [position] => 0 
// ) 
//  Array 
//  (
//   [id] => b 
//   [position] => 1 
// ) 
//  Array 
//  (
//   [id] => c 
//   [position] => 2 
// ) 
//) 
+0

これは素晴らしいことです。あなたがそれを好きであることを喜んで@ Khlav – Klav

+0

を共有してくれてありがとう。一度コードを徹底的に取り除くと、最終結果はかなり良いように見えます。 – naomik

+0

完全に。これらを使って遊ぶのはすばらしい – Klav

関連する問題