按键返回数组值

时间:2017-02-27 22:39:41

标签: php arrays

我有一个如下数组(下面的var_dump):

array (size=3)
  'Test Field 1' => 
    array (size=1)
      0 => string 'foo' (length=3)
  'Test Field 2' => 
    array (size=3)
      0 => string 'bar' (length=3)
      1 => string 'foobar' (length=6)
      2 => string 'barfoobar' (length=9)
  'Test Field 3' => 
    array (size=2)
      0 => string 'barfoo' (length=6)
      1 => string 'foobarfoobar' (length=12)

我想输出数据,按键分组如下:

  • 测试场1:foo
  • 测试场2:栏
  • 测试场3:barfoo
  • 测试场2:foobar
  • 测试场3:foobarfoobar
  • 测试场2:barfoobar

基本上,所有0个键组合在一起,然后是1个键,然后是2个键等。

阵列不会总是以这种方式设置,这意味着每个阵列可能有更多的元素,或者可能只有一个,所以它需要能够动态填充。

典型的foreach循环为我提供了如下数据输出(不是我想要的):

  • 测试场1:foo
  • 测试场2:栏
  • 测试场2:foobar
  • 测试场2:barfoobar
  • 测试场3:barfoo
  • 测试场3:foobarfoobar

2 个答案:

答案 0 :(得分:0)

上面的var_dump来自变量$output。为了显示上述数据,我做了以下工作:

$max = max( array_map( 'count', $output ) ); // get the max number of keys in the array
$repeat = 0; //set to start with 0 key
for( $repeat; $repeat<=$max; $repeat++ ){
    foreach($output as $key => $values){ //loop through the $output
        if ( isset( $values[$repeat] ) ){ // check if this exists
            echo $key . ': ' . $values[$repeat] . '<br />'; //display the key/values as needed
        }
    }
}

答案 1 :(得分:0)

这是经过测试的代码

$input = [
    'Test Field 1' => [
        'foo',
    ],
    'Test Field 2' => [
        'bar',
        'foobar',
        'barfoobar',
    ],
    'Test Field 3' => [
        'barfoo',
        'foobarfoobar',
    ],
];

function recursive_print($input)
{
    foreach ($input as $k => &$v) {
        echo "\n";
        echo $k. ':' . array_shift($v);

        if (!$v) {
            unset($input[$k]);
        }
    }


    if ($input) {
        recursive_print($input);
    }
}

recursive_print($input);