2016-03-21 2 views
2

Это мой массив, и я хочу 60, 20, 39, 70,12, 29,31,72,59 в одном массиве. одномерный массив.sort inested 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 
    ) 
); 

моя попытка была

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

}

Но когда я печать этот массив снова генерировать три массива. на print_r ($ array); показывая этот результат.

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) 

Есть ли способ получить только последний массив из вышеупомянутого массива или любое другое решение.

+0

какой у вас результат печати выйдет !! –

+0

Ваш код работает, он производит ожидаемый результат, но '}' отсутствует после foreach. – Indrajit

ответ

1

Попробуйте это, чтобы сгладить массив:

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

Выход:

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) } 

Эта пользовательская функция была взята из: http://php.net/manual/en/function.array-values.php

+0

Спасибо за ответ. его работа –

0

Поскольку вы демпинг $array внутри первого цикла foreach)

0

Ваш звук, как вы можете объявить массив $ в цикл, если вы сделаете это, вы получите три arrays.So объявить вне цикл будет получить один массив

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

вы можете сделать в любом традиционным способом т.е. foreach loop, а также может использовать итератор. посмотрим на решение ниже:

1) с помощью foreach петли и array_merge функции

$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) с помощью ArrayIterator:

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

print_r($new_array); 

В обоих Выход раствора будет:

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

Отлично, его работа. благодаря –

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