-1

HTMLフォームからいくつかの$_POSTed変数を反復処理しようとしています。残念ながら、各「行」にアクセスして何かを行うことができません。

$_POST['names'] = array('alan', 'bob', 'carl', 'dan', 'ed');
$_POST['emails'] = array('0@.com', '1@com', '2.com', '3.com', '4.com');
$data=$_POST;

foreach($data as $index=>$row){
  doSomethingNames($row[$index]); //in reality, this would be a more complicated function that needs to access each row's variables, same for printEmails()
  doSomethingEmails($row[$index]); 
}

function doSomethingNames($row){
   print_r($row['names']);// should print alan-bob-carl-dan-ed
}

function doSomethingEmails($row){
   print_r($row['emails']); //should print 0.com-1.com-2.com-3.com-4.com
}

現在、このコードを実行しても何も出力されません。各行のデータにアクセスするために誰かが提供する可能性のある支援をいただければ幸いです。

4

4 に答える 4

2

より良い方法は、配列の別の構造を使用することです:

<?php
    $data['names'] = array('0aa', '1bb', '2cc', '3dd', '4ee');
    $data['emails'] = array('AA', 'BB', 'CC', 'DD', 'EE');

    $united_data = array();
    $count = count( $data['names'] );

    for( $i = 0; $i < $count; $i++ )
    {
        array_push( $united_data, 
            array( 'name' => $data['names'][$i], 'email' => $data['emails'][$i] )
        );
    }

    foreach( $united_data as $key => $val ){
        printNames( $united_data[$key] );
        printEmails( $united_data[$key] );

    }

    function printNames( $row ){
        echo 'name: ' . $row['name'] . ', ';
    }

    function printEmails( $row ){
        echo 'email: ' . $row['email'] . '<br>';
    }
于 2012-10-05T19:49:55.947 に答える
1

これは次のように実行できます。

$data['names'] = array('0aa', '1bb', '2cc', '3dd', '4ee');
$data['emails'] = array('AA', 'BB', 'CC', 'DD', 'EE');

foreach($data as $index => $row){
  echo $index . ': ' . implode('-', $row);
}

これにより、インデックスの名前が出力され、 implode()を使用して要素の文字列が取得されます。

新しい例:

$data['names'] = array('0aa', '1bb', '2cc', '3dd', '4ee');
$data['emails'] = array('AA', 'BB', 'CC', 'DD', 'EE');

for ($i = 0; $i < count($data['names']); $i++) {
  echo $data['names'][$i] . ': ' . $data['emails'][$i] . '<br />';
}

これは、両方の配列の要素数が同じ場合にのみ機能します。

于 2012-10-05T19:28:33.440 に答える
0

望んでいないことを達成しようとする方法は、間違いなく有効な方法ではありません。PHP の配列関数を使用しますimplode()

function printNames($row) {
  echo implode("-", $row['names']);
}

これが行うことは、配列のすべてのメンバーを反復処理し、反復された値を結合して「接着剤」(この場合はマイナス記号) で区切った文字列を返すことです。接着剤はオプションであることに注意してください。次のことも有効です (推奨されませんが、代わりに接着剤に空の文字列を使用することをお勧めします)。

function printNames($row) {
  echo implode($row['names']);
}
于 2012-10-05T19:23:56.310 に答える
0

そのまま使用してimplode()ください。配列内の値を と連結します-

 function printNames($row){     
 print_r(implode('-',$row)); // should print 0aa-1bb-2cc-3dd-4ee
}

function printEmails($row){
 print_r(implode('-', $row)); //should print AA-BB-CC-DD-EE
}

編集:

 foreach($data as $index => $row){
  foreach($row as $k =>$v) {
  if($k === 'names')
   printNames($v);
  else 
    printEmails($v);
 }
}

 function printNames($elem){
   print_r($elem); echo '-';// should print 0aa-1bb-2cc-3dd-4ee
 }

function printEmails($element){
   print_r($elem); echo'-'; //should print AA-BB-CC-DD-EE
}
于 2012-10-05T19:25:47.643 に答える