简体   繁体   中英

Merge arrays. Second array as a “column”

Here is an example...

I have the following code:

$a=array("a","b","c");
$b=array("1","2","3");

$c = array_merge($a,$b);

echo "<pre>";
var_dump($c); 
echo "</pre>";

Gives me an output:

array(6) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "1"
  [4]=>
  string(1) "2"
  [5]=>
  string(1) "3"
}

How could I change the code so that it gives me this output instead:

array(3) {
  [0]=>
  string(5) "a','1"
  [1]=>
  string(5) "b','2"
  [2]=>
  string(5) "c','3"

Any ideas?

$c = array_map(function ($a, $b) { return "$a','$b"; }, $a, $b);

对于任何有益的...

Using SPL's MultipleIterator:

$a = array("a","b","c");
$b = array("1","2","3");

$mi = new MultipleIterator();
$mi->attachIterator(new ArrayIterator($a));
$mi->attachIterator(new ArrayIterator($b));

$c = array();
foreach($mi as $row) {
    $c[] = $row[0] . "','" . $row[1];
}

var_dump($c);

If the keys to both arrays are always in parity, you could do something like

foreach ($a as $key => $value) {
    $newArray[] = "$value','{$b[$key]}";
}

var_dump($newArray);
// would output the below
array(3) {
[0]=>
  string(5) "a','1"
  [1]=>
  string(5) "b','2"
  [2]=>
  string(5) "c','3"

However, the result looks a little weird, are you sure this is what you are trying to achieve?

$a=array("a","b","c");
$b=array("1","2","3");

if(count($a) > count($b)){
  foreach($a as $key => $value)
      $c[$key] = isset($b[$key])? $value.",".$b[$key] : $value;
} else {
    foreach($b as $key => $value)
      $c[$key] = isset($a[$key])? $a[$key].",".$value : $value;
}

Use above code it will for your array.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM