2017-04-04 29 views
0

我曾在一個數組(注意,表格中以隨機順序 - 還有其他領域也一樣)以下書目數據:增值,在foreach循環現有陣列關鍵

Array 
(
    [0] => Array 
     (
      ['Pub_Name'] => Nature 
      ['Volume'] => 6 
      ['Pages'] => 215-217 
     ) 
    [1] => Array 
     (
      ['Volume'] => 15 
      ['Pages'] => 358-360 
      ['Pub_Name'] => Science    
     ) 
    [2] => Array 
     (
      ['Pub_Name'] => PNAS 
      ['Pages'] => 17-19    
      ['Volume'] => 22 
     ) 
)  

我想「合併「將這三個字段合併爲一個,例如['Pub_Name']=Nature, 6: 215-217。我嘗試以下whitout成功(我猜$Record['Pub_Name']是不正確的sintax):

foreach ($MyArray as $Record) { 
    foreach ($Record as $key => $values) { 
     if ($key=="Volume") {$Volumen=", ".$values;} else {$Volumen="";} 
     if ($key=="Pages") {$Paginas=": ".$values;} else {$Paginas="";} 
    } 

    //This is the line for which I want to know the sintax!! 
    $Record['Pub_Name'].=$Volumen.$Paginas; 
} 
+0

結帳http://php.net/manual/en/function.array-values.php – mkaatman

回答

1

無需兩個循環:

foreach ($MyArray as $Record) { 
    $result[]['Pub_Name'] = "{$Record['Pub_Name']}, {$Record['Pages']}: {$Record['Volume']}"; 
} 

然後,你必須在$resultPub_Name新的項目。

如果要修改原來的,則參考&$Record

foreach ($MyArray as &$Record) { 
    $Record['Pub_Name'] = "{$Record['Pub_Name']}, {$Record['Pages']}: {$Record['Volume']}"; 
} 

或者使用鍵和修改原始數組:

foreach ($MyArray as $key => $Record) { 
    $MyArray[$key]['Pub_Name'] = "{$Record['Pub_Name']}, {$Record['Pages']}: {$Record['Volume']}"; 
} 
+0

它的工作,謝謝!請問,在第二種選擇中'&'是什麼? – CMArg

+0

這是修改'$ Record'時修改數組的引用。在這裏解釋:http://php.net/manual/en/control-structures.foreach.php – AbraCadaver

+0

謝謝。對你的鏈接取消「$ Record」的警告也幫助了我... – CMArg

0

PHP code demo

<?php 
$array=Array 
(
    0 => Array 
     (
      'Pub_Name' => "Nature", 
      'Volume' => 6, 
      'Pages' => "215-217" 
     ), 
    1 => Array 
     (
      'Volume' => 15, 
      'Pages' => "358-360", 
      'Pub_Name' => "Science"    
     ), 
    2 => Array 
     (
      'Pub_Name' => 'PNAS', 
      'Pages' => "17-19",   
      'Volume' => 22 
     ) 
); 
$result=array(); 
foreach ($array as $data) 
{ 
    $result[]=array('Pub_Name'=> $data['Pub_Name'].", ".$data["Volume"].": ".$data["Pages"]); 

} 
print_r($result); 

輸出:

Array 
(
    [0] => Array 
     (
      [Pub_Name] => Nature, 6: 215-217 
     ) 

    [1] => Array 
     (
      [Pub_Name] => Science, 15: 358-360 
     ) 

    [2] => Array 
     (
      [Pub_Name] => PNAS, 22: 17-19 
     ) 

) 
0

我想這是你在找什麼:

<?php 
$input = [ 
    [ 
     'Pub_Name' => 'Nature', 
     'Volume' => '6', 
     'Pages' => '215-217' 
    ], 
    [ 
     'Volume' => '15', 
     'Pages' => '358-30', 
     'Pub_Name' => 'Science', 
    ], 
    [ 
     'Pub_Name' => 'PNAS', 
     'Pages' => '17-19', 
     'Volume' => '22' 
    ] 
]; 
$output = []; 
array_walk($input, function ($entry) use (&$output) { 
    $output[] = sprintf(
     '%s, %s: %s', 
     $entry['Pub_Name'], 
     $entry['Volume'], 
     $entry['Pages'] 
    ); 
}); 
print_r($output); 

以上代碼的輸出顯然是:

Array 
(
    [0] => Nature, 6: 215-217 
    [1] => Science, 15: 358-30 
    [2] => PNAS, 22: 17-19 
) 
-1

這應有助於:

$combined = []; 
foreach($myArray as $pub) { 
    $combined.push($pub['Pub_Name'] . ', ' . $pub['Volume'] . ': ' . $pub['Pages']); 
} 
0

使用array_map

$in = [ 
    0 => [ 
     'Pub_Name' => 'Nature', 
     'Volume' => 6, 
     'Pages' => '215-217' 
    ], 
    1 => [ 
     'Volume' => 15, 
     'Pages' => '358-360', 
     'Pub_Name' => 'Science', 
    ], 
    2 => [ 
     'Pub_Name' => 'PNAS', 
     'Pages' => '17-19', 
     'Volume' => 22 
    ] 
]; 

array_map(function ($item) { 
    return $item['Pub_Name'] . ', ' . $item['Volume'] . ': ' . $item['Pages']; 
}, $in); 
0

有幾種不同的方式來做到這一點 - 但更可讀的方式之一:

// create a copy of the original - so we aren't looping thru the same array we're updating 
$updatedArray = $MyArray; 

foreach ($MyArray as $index => $record) { 
    $updatedArray[$index]['Pub_Name'] = 
     $record['Pub_Name']. 
     ($record['Volume'] ? ', '.$record['Volume'] : ''). 
     ($record['Pages'] ? ': '.$record['Pages']:''); 
} 
0

在一個循環清除的方式。用sprintf(),便於格式:

<?php 
$src =[ ['Pub_Name' => 'Nature', 'Volume' => '6', 'Pages' => '215-217'], 
     ['Volume' => '15', 'Pages' => '358-30', 'Pub_Name' => 'Science'], 
     ['Pub_Name' => 'PNAS', 'Pages' => '17-19', 'Volume' => '22'] 
     ]; 

foreach ($src as $element) { 
    $dest[] = sprintf("%s, %d: %s", 
     $element['Pub_Name'], 
     $element['Volume'], 
     $element['Pages']); 
} 

var_dump($dest); 
?> 

,你會得到:

array(3) { 
[0]=> string(18) "Nature, 6: 215-217" 
[1]=> string(19) "Science, 15: 358-30" 
[2]=> string(15) "PNAS, 22: 17-19" 
} 

測試它here

+1

非常感謝。很多答案在幾分鐘內(我一直堅持這個很長一段時間)。可悲的是,只能有一個被接受的答案。 – CMArg