在foreach循环中从2个不同的多维数组输出1个数组

时间:2014-02-23 20:14:53

标签: php arrays multidimensional-array

我需要一些多维数组的帮助。我需要从PHP中的其他两个数组输出/创建一个新数组。我知道我的例子是错的,但这是我所拥有的几乎可行的例子:

 $myarray = array(
      'customid1' = array(
                  name=> 'Tim',
                  address=> '23 Some Address'
                  ),
      'customid2' = array(
                  name=> 'John',
                  address=> 'Another Address'
                  )
 );

 $keys = array();
 $values = array(); 

 foreach($myarray as $key => $keyitem) {
        $getkeys = $myarray[$key]['name'] .'-and-a-string';
        $keys[] = $getkeys;
 } 

 foreach($myarray as $value => $valueitem) {
        $getvalues = 'some-other-text-'. $myarray[$key]['address'];
        $values[] = $getvalues;           
    }

 $newarray = array_combine($keys, $values); 

上面的代码将获得正确的所有键,除了新数组中该键的值。相反,它显示了所有键中数组中的最后一个值。所以我的print_r结果将如下所示:

Array ( Tim-and-a-string => some-other-text-Another Address 
        John-and-a-string => some-other-text-Another Address 
)

正如你所看到的,'some-other-text-Another-Address'出现在所有这些上,但是第二个键'Tim-and-a-string'需要'some-other-text-23 Some Address '包括

2 个答案:

答案 0 :(得分:2)

这是一个非常小的错误,但您使用的是错误的变量:

您在第二个$key中使用的是$value而不是foreach()

由于新的foreach循环没有覆盖它,所以

$key将与循环中的最后一个键相同。

这应该有效:

$myarray = array(
      'customid1' = array(
                  name=> 'Tim',
                  address=> '23 Some Address'
                  ),
      'customid2' = array(
                  name=> 'John',
                  address=> 'Another Address'
                  )
 );

 $keys = array();
 $values = array(); 

 foreach($myarray as $key => $keyitem) {
        $getkeys = $myarray[$key]['name'] .'-and-a-string';
        $keys[] = $getkeys;
 } 

 foreach($myarray as $value => $valueitem) {
        $getvalues = 'some-other-text-'. $myarray[$value]['address'];
        $values[] = $getvalues;           
    }

 $newarray = array_combine($keys, $values); 

答案 1 :(得分:0)

试试这个:

$newarray = array_combine(
    array_values(array_map(function ($v) { return $v['name'].'-and-a-string'; }, $myarray)),
    array_values(array_map(function ($v) { return 'some-other-text-'.$v['address']; }, $myarray))
);