在PHP foreach循环中访问$ _POSTed变量数组

时间:2012-10-05 19:19:44

标签: php arrays multidimensional-array foreach indexing

我希望从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 个答案:

答案 0 :(得分: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>';
    }

答案 1 :(得分: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 />';
}

仅当两个数组的元素数相同时才有效。

答案 2 :(得分:0)

你试图完成你想要的方式绝对不是一种有效的方法。使用PHP的数组函数implode()

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

这样做迭代遍历数组的每个成员并返回一个字符串,其中迭代值以“glue”(在这种情况下为减号)分隔。请记住,胶水是可选的,执行以下操作也是有效的(尽管不鼓励,最好使用空字符串代替胶水)。

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

答案 3 :(得分: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
}