2017-12-27 11 views
-5

Erstellen habe ich ein mehrdimensionales Array, das wie folgt aussieht:ein mehrdimensionales Array aus einem Array

Array (
    [0] => Array 
     (
      ['pathname'] => index.htm 
     ) 

    [1] => Array 
     (
      ['category'] => wiki 
     ) 

    [2] => Array 
     (
      ['pathname'] => anything.htm 
     ) 

    [3] => Array 
     (
      ['category'] => readme 
     ) 

    [4] => Array 
     (
      ['pathname'] => anotherthing.htm 
     ) 

    [5] => Array 
     (
      ['category'] => wiki 
     ) 

) 

Nun, das Array nicht korrekt ist, da jeder Pfad eine eigene Kategorie haben sollte. Also, was ich wirklich brauchen, ist die folgende Reihe:

Array (
    [0] => Array 
     (
      ['pathname'] => index.htm 
      ['category'] => wiki 
     ) 

    [1] => Array 
     (
      ['pathname'] => anything.htm 
      ['category'] => readme 
     ) 

    [2] => Array 
     (
      ['pathname'] => anotherthing.htm 
      ['category'] => wiki 
     ) 

Und das ist, wie mein Code wie folgt aussieht:

<?php 
$data = array('index.htm', 'wiki', 'anything.htm', 'readme', 'anotherthing.htm', 'wiki'); 

$i = 0; 
foreach ($data as $value) { 
    if (strpos($value, '.htm')) { 
     $path[$i]['pathname'] = $value; 
    } 
    if($value == 'readme' || $value == 'wiki') { 
     $path[$i]['category'] = $value; 
    } 

    $i++; 
} 

print_r($path); 
?> 

Was genau mache ich falsch? Jede Hilfe wäre willkommen!

+0

Sie haben noch keine '$ path' Array in Ihrem Code definiert, schreiben dies vor der foreach-Schleife,' $ path = []; ' – blackcat

+0

Die Art und Weise Sie konstruieren das Array ist korrekt, das Problem ist in Ihrem Fall Bedingungen – claudio

+0

Was wird sein, wenn Sie haben, 5 oder 7 Element in Array? oder möchtest du die Standardkategorie festlegen? – OIIO

Antwort

6

Wenn Sie das Array Split dieser Paare haben wollen, wird die einfachste array_chunk

$data = array('index.htm', 'wiki', 'anything.htm', 'readme', 'anotherthing.htm', 'wiki'); 
$arr = array_chunk($data, 2); 
var_dump($arr); 

werden mit den Tasten hinzuzufügen Schleife die Brocken:

foreach($arr as &$a){ 
    $a = ['pathname' => $a[0], 'category' => $a[1]]; 
} 
+1

Sehr nützlich. Danke, ich kannte diese Funktion nicht! –

+2

Was ist mit Schlüsseln - ('Pfadname',' Kategorie') @RezaSaadati. Hast du die Ausgabe überprüft? –

+3

Es gibt nicht die Schlüssel 'Pfadname' und' Kategorie': https://eval.in/925876 – OIIO

2

Erhöhungsschritte nur dann, wenn sie gebraucht wird

<?php 
$data = array('index.htm', 'wiki', 'anything.htm', 'readme', 'anotherthing.htm', 'wiki'); 

$i = -1; 
foreach ($data as $value) { 
    if (strpos($value, '.htm')) { 
     $i++; 
     $path[$i]['pathname'] = $value; 
    } 
    if($value == 'readme' || $value == 'wiki') { 
     $path[$i]['category'] = $value; 
    } 

} 

print_r($path); 
?> 
+0

korrigieren. Korrigieren Sie, behalten Sie die Logik. –

0

Verwenden Sie einfach for Schleife, können Sie auch Existenz überprüfen Kategorie, wenn nicht als Standard wie in Beispiel unten gesetzt existieren

<?php 
$data = array('index.htm', 'wiki', 'anything.htm', 'readme', 'anotherthing.htm', 'wiki','extra'); 

$i = 0; 
for($i=0;$i<count($data);$i+=2){ 
    $path[] = ['pathname'=>$data[$i],'category'=>$data[$i+1]?:'default']; 
} 
print_r($path); 
?> 

Live-Demo: https://eval.in/925872

Ausgang

Array (
[0] => Array 
    (
     [pathname] => index.htm 
     [category] => wiki 
    ) 

[1] => Array 
    (
     [pathname] => anything.htm 
     [category] => readme 
    ) 

[2] => Array 
    (
     [pathname] => anotherthing.htm 
     [category] => wiki 
    ) 

[3] => Array 
    (
     [pathname] => extra 
     [category] => default 
    ) 

) 
2

sein wird und Sie diese Methode verwenden können:

$data = array('index.htm', 'wiki', 'anything.htm', 'readme', 'anotherthing.htm', 'wiki'); 
$data = array_chunk($data, 2); 

$list = []; 

foreach($data as $row) 
{ 
    $list[] = [ 
     'pathname' => $row[0], 
     'category' => $row[1] 
    ]; 
} 

echo '<pre>'; 
print_r($list); 

Ergebnis:

Array 
(
    [0] => Array 
     (
      [pathname] => index.htm 
      [category] => wiki 
     ) 

    [1] => Array 
     (
      [pathname] => anything.htm 
      [category] => readme 
     ) 

    [2] => Array 
     (
      [pathname] => anotherthing.htm 
      [category] => wiki 
     ) 

) 
0

Sie können es so machen wie auch

<?php 
$data = array(['pathname' => 'index.htm'], ['category' => 'wiki'], ['pathname' => 'anything.htm'], ['category' => 'readme'], ['pathname' => 'anotherthing.htm'], ['category' => 'wiki']); 

$new_data = []; 

$l = count($data); 

for ($i = 0; $i < $l; $i++) { 
    if (isset($data[$i + 1]) { 
     $new_data[] = array_merge($data[$i], $data[$i + 1]); 
    } 
} 

// or with foreach 

foreach ($data as $i => $v) { 
    if (isset($data[$i + 1]) { 
     $new_data[] = array_merge($data[$i], $data[$i + 1]); 
    } 
} 

print_r($new_data); 
?> 
Verwandte Themen