-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 回答