2016-03-21 8 views
2

Dies ist mein Array und ich will 60, 20, 39, 70,12, 29,31,72,59 in einem einzigen Array. eindimensionales Array.sortierten geschachtelten Array php

$marks = array(
    "abc" => array(
    "a" => 60, 
    "b" => 20, 
    "c" => 39 
    ), 
    "def" => array(
    "a" => 70, 
    "b" => 12, 
    "c" => 29 
    ), 
    "xyz" => array(
    "a" => 31, 
    "b" => 72, 
    "c" => 59 
    ) 
); 

mein Versuch war

foreach($marks as $name=>$score) 
{ 
    foreach($score as $subject=>$number) 
    { 
$array[]= $number; 
    } 

}

Aber wenn ich dieses Array bin Druck wieder drei Array erzeugen. auf print_r ($ array); es zeigt diesen Ausgang.

Array ([0] => 60 [1] => 20 [2] => 39) Array ([0] => 60 [1] => 20 [2] => 39 [3] => 70 [4] => 12 [5] => 29) Array ([0] => 60 [1] => 20 [2] => 39 [3] => 70 [4] => 12 [5] => 29 [6] => 31 [7] => 72 [8] => 59) 

Gibt es irgendeine Methode, um nur das letzte Array aus dem obigen Array zu holen. Oder eine andere Lösung.

+0

was ist dein ergebnis druck komm raus !! –

+0

Ihr Code funktioniert, er produziert die erwartete Ausgabe, aber '}' fehlt nach foreach. – Indrajit

Antwort

1

dieses Versuchen Sie das Array zu glätten:

<?php 

$marks = array(
    "abc" => array(
    "a" => 60, 
    "b" => 20, 
    "c" => 39 
    ), 
    "def" => array(
    "a" => 70, 
    "b" => 12, 
    "c" => 29 
    ), 
    "xyz" => array(
    "a" => 31, 
    "b" => 72, 
    "c" => 59 
    ) 
); 

function array_values_recursive($array) 
{ 
    $arrayValues = array(); 

    foreach ($array as $value) 
    { 
     if (is_scalar($value) OR is_resource($value)) 
     { 
      $arrayValues[] = $value; 
     } 
     elseif (is_array($value)) 
     { 
      $arrayValues = array_merge($arrayValues, array_values_recursive($value)); 
     } 
    } 

    return $arrayValues; 
} 

var_dump(array_values_recursive($marks)); 

Ausgang:

array(9) { [0]=> int(60) [1]=> int(20) [2]=> int(39) [3]=> int(70) [4]=> int(12) [5]=> int(29) [6]=> int(31) [7]=> int(72) [8]=> int(59) } 

Diese benutzerdefinierte Funktion aus genommen wurde: http://php.net/manual/en/function.array-values.php

+0

Danke für die Antwort. seine Arbeit –

0

Weil Sie $array innerhalb der ersten foreach Schleife Dumping sind :)

0

Ihr Sound wie Sie für Ihre Schleife $ Array deklarieren Diese können, wenn Sie dies tun, werden Sie drei arrays.So außerhalb der for-Schleife wird einzigen Array erhalten

$array = array(); //correct 
foreach($marks as $name=>$score) 
{ 
//$array = array(); //incorrect 
foreach($score as $subject=>$number) 
{ 
    $array[]= $number; 
} 
} 
var_dump($array); 
1

erhalten erklären Sie sind in traditioneller Art und Weise tun können dh foreach-Schleife und kann auch Iterator verwenden. einen Blick auf folgende Lösung:

1) unter Verwendung von foreach Schleife und array_merge Funktion

$marks = array(
    "abc" => array(
     "a" => 60, 
     "b" => 20, 
     "c" => 39 
    ), 
    "def" => array(
     "a" => 70, 
     "b" => 12, 
     "c" => 29 
    ), 
    "xyz" => array(
     "a" => 31, 
     "b" => 72, 
     "c" => 59 
    ) 
); 

$new_array = array(); 
foreach ($marks as $mark) { 
    $new_array = array_merge($new_array, array_values($mark)); 
} 

print_r($new_array); 

2) unter Verwendung von ArrayIterator:

$new_array = array(); 
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($marks)); 
foreach ($iterator as $key => $value) { 
    $new_array[] = $value; 
} 

print_r($new_array); 

In beide Lösungs Ausgang wird:

Array 
(
    [0] => 60 
    [1] => 20 
    [2] => 39 
    [3] => 70 
    [4] => 12 
    [5] => 29 
    [6] => 31 
    [7] => 72 
    [8] => 59 
) 
+0

Großartig, es funktioniert. Vielen Dank –

0
foreach($marks as $name=>$score) 
{ 
    foreach($score as $subject=>$number) 
    { 
     $array[]= $number; 
    } 
} 
Verwandte Themen