2017-07-07 88 views
0

我有簡單的PHP數組,用於位置郵編及其名稱。我想用'name'壓縮'code'。來自WooCommerce數據庫區域的這段代碼。如何通過鍵或值填充php陣列

Array (
    [0] => Array 
     (
      [name] => Jambi Selatan 
      [code] => 36139 
      [code_name] => 36139 - Jambi Selatan 
     ) 

    [1] => Array 
     (
      [name] => Jambi Selatan 
      [code] => 36137 
      [code_name] => 36137 - Jambi Selatan 
     ) 

    [2] => Array 
     (
      [name] => Bagan Pete 
      [code] => 36129 
      [code_name] => 36129 - Bagan Pete 
     ) 

    [3] => Array 
     (
      [name] => Bagan Pete 
      [code] => 36127 
      [code_name] => 36127 - Bagan Pete 
     ) 

) 

我希望得到的最終結果由「名」和「密碼」組合是這樣的:我嘗試array_unique方法,但不能正常工作。

Array (
    [0] => Array 
     (
      [name] => Jambi Selatan 
      [code] => 36139, 36137 
      [code_name] => 36139, 36139 - Jambi Selatan 
     ) 

    [1] => Array 
     (
      [name] => Bagan Pete 
      [code] => 36127, 36129 
      [code_name] => 36127, 36129 - Bagan Pete 
     ) 

) 

請再幫我,

更新:

我試試這個方法,但在 'CODE_NAME'

$out = array(); 
      foreach ($new_arr as $key => $value){ 
       if (array_key_exists($value['name'], $out)){ 
        $out[$value['name']]['code'] .= ', '.$value['code']; 
       } else { 
        $out[$value['name']] = array(
         'name' => $value['name'], 
         'code' => $value['code'], 
         'code_name' => $value['code'] . ' - ' . $value['name'] 
        ); 
       } 
      } 
      $out = array_values($out); 
      print_r($out); 
+0

你至今嘗試過什麼? –

+0

Sahil Gulati,用代碼嘗試更新的問題 – Opsional

回答

1

你必須in_array和更新,以檢查重複的名稱存在數組值。如果不存在插入該值$out陣列。

$out = array(); 
foreach($new_arr as $k=>$v) { 
    //empty array state 
    if(count($out) == 0) { 
     $out[] = $v; 
     continue; 
    } 
    foreach ($out as $key => $value) { 
     if(in_array($v["name"],$value)) { 
      $out[$key]["code"] .= ",".$v["code"]; 
      //for the code_name output as OP described 
      $nn = explode("-", $value["code_name"]); 
      $l = count($nn) - 1; 
      unset($nn[$l]); 
      $out[$key]["code_name"] = implode($nn).",".$v["code_name"]; 
      break; 
     } else { 
      if((count($out)-1) == $key) { 
       $out[] = $v; 
      } 
     } 
    } 
} 
var_dump($out); 
+0

這是最好的方法,謝謝。 – Opsional

0

不能解決對於有人有問題我一樣,這修復方法:

$out = array(); 
      foreach ($new_arr as $key => $value){ 
       if (array_key_exists($value['name'], $out)){ 
        $out[$value['name']]['code'] .= ', '.$value['code']; 
        $out[$value['name']]['code_name'] .= ', '.$value['code'] . ' - ' . $value['name']; 
       } else { 
        $out[$value['name']] = array(
         'name' => $value['name'], 
         'code' => $value['code'], 
         'code_name' => $value['code'] 
        ); 
       } 
      } 
      $out = array_values($out); 
      print_r($out); 

最終結果;

Array 
(
    [0] => Array 
     (
      [name] => Jambi Selatan 
      [code] => 36139, 36137 
      [code_name] => 36139, 36137 - Jambi Selatan 
     ) 

    [1] => Array 
     (
      [name] => Bagan Pete 
      [code] => 36129, 36127 
      [code_name] => 36129, 36127 - Bagan Pete 
     ) 

) 
0

請嘗試以下一個作爲另一種方法:

<?php 
$arr = Array (
    Array 
     (
      'name' => 'Jambi Selatan', 
      'code' => '36139', 
      'code_name' => '36139 - Jambi Selatan' 
     ), 
    Array 
     (
      'name' => 'Jambi Selatan', 
      'code' => '36137', 
      'code_name' => '36137 - Jambi Selatan' 
     ), 
    Array 
     (
      'name' => 'Bagan Pete', 
      'code' => '36129', 
      'code_name' => '36129 - Bagan Pete' 
     ), 
    Array 
     (
      'name' => 'Bagan Pete', 
      'code' => '36127', 
      'code_name' => '36127 - Bagan Pete' 
     ) 
); 

$newarr = array(); 
$finalArr = array(); 
foreach($arr as $aa) { 
    $newarr[$aa['name']][] = $aa; 
} 

foreach($newarr as $kk => $bb) { 
    foreach($bb as $cc) { 
     $finalArr[$kk]['name'] = $cc['name']; 

     if(isset($finalArr[$kk]['code'])) { 
      $finalArr[$kk]['code'] = $finalArr[$kk]['code'].','.$cc['code']; 
     } else { 
      $finalArr[$kk]['code'] = $cc['code']; 
     } 
     if(isset($finalArr[$kk]['code_name'])) { 
      $finalArr[$kk]['code_name'] = $finalArr[$kk]['code_name'].','.$cc['code_name']; 
     } else { 
      $finalArr[$kk]['code_name'] = $cc['code_name']; 
     } 
    } 
} 
echo "<pre>"; 
print_r($finalArr); 
echo "</pre>"; 
?>