2017-07-07 2 views
0

Ich habe einfache PHP-Array für Standort PLZ und ihren Namen. Ich möchte 'Code' nach 'Name' komprimieren. Dieser Code von WooCommerce-Datenbankzonen.Wie Php-Array mit Schlüssel oder Wert bevölkern

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 
     ) 

) 

Ich möchte von ‚name‘ kombiniert Endergebnis erhalten und ‚Code‘ wie folgt aus: i array_unique Methode versuchen, aber nicht funktioniert.

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 
     ) 

) 

Bitte helfen Sie mir wieder,

Update:.

ich versuchen, diese Methode, aber fix nicht '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

Was haben Sie bisher versucht? –

+0

Sahil Gulati, Frage Update mit Code für Versuch – Opsional

Antwort

1

Sie haben von in_array und Aktualisierung doppelten Namen überprüfen existieren Wert Array .Wenn nicht Insert vorhanden sind, die zu $out Array-Wert.

$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

Dies ist die beste Methode, danke. – Opsional

0

Für jemanden Problem wie ich haben, diese Methode zur Behebung:

$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); 

Endergebnis;

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

Bitte versuchen Sie es unten ein als einen weiteren Ansatz:

<?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>"; 
?> 
Verwandte Themen