2016-08-12 6 views
-1
Array 
(
    [0] => Array 
     (
      [id] => 1 
      [sht] => L 
      [tm] => tttt 
     ) 

    [1] => Array 
     (
      [id] => 7 
      [tm] => xyz 
     ) 

    [2] => Array 
     (
      [id] => 12 
      [hand] => R 
     ) 

    [3] => Array 
     (
      [id] => 20 
     ) 

) 

Я хотел бы принести и индивидуальные для всех ид в один массив, как показано ниже, как мог я могу сделать, пожалуйста предложите я пытался, но не работаютмногомерного массива в PHP

я попытался с помощью цикла Еогеаспа

foreach($results as $value){ 
    while(list($key,$value) = each($results)){ 
    echo $value 
    } 

} 
+0

же показатели будут более-запись в массиве PHP так ожидаемый результат не possibleas вы показано на рисунке. индекс должен быть изменен –

+1

Попробуйте с помощью array_column http://php.net/manual/en/function.array-column.php – sandipshirsale

+1

@ Обязательно, вы правы – sandipshirsale

ответ

1

Вы ищете array_column(), который возвращает значения из одного столбца ввода, идентифицированного с помощью column_key.

$ids=array_column($results,"id"); 
print_r($ids); 

Где $ids бы один одномерный массив, состоящий только из идентификаторов.

Ссылка: http://php.net/manual/en/function.array-column.php


Хотя вы не можете иметь в массиве тот же ключ. Результат выше мог бы что-то подобное,

Array 
(
    [0] => 1 
    [1] => 7 
    [2] => 12 
    [3] => 20 
) 

Массив, состоящий из идентификаторов только по которым вы можете перебрать.

array_column() is supported in PHP version greater than 5.3

+0

Чтобы это работало, хотя у вас должна быть более высокая версия php, чем 5.3 - если это так, то это хорошее чистое решение. – RamRaider

+0

Это правда, спасибо, что упомянули об этом. :) Обновлен ответ. –

+0

Я думаю, что 'foreach()' - простое решение, потому что версия для этого не является проблемой. Правило BTY выше правильно. –

0

Вы хотите получить одномерный массив, содержащий все идентификаторы? Если да, то вы могли бы использовать эту функцию array_column()

Попробуйте это:

$array = array(
    array(
     'id' => 1, 
     'sht' => 'L', 
     'tm' => 'tttt' 
    ), 
    array(
     'id' => 7, 
     'tm' => 'xyz' 
    ), 
    array(
     'id' => 12, 
     'hand' => 'R' 
    ), 
    array(
    'id' => 20 
    ) 
); 

$id = array_column($array, "id"); 

Результат:

Array 
(
    [0] => 1 
    [1] => 7 
    [2] => 12 
    [3] => 20 
) 
+0

Правильный @Ob Manipulator – James

+0

(PHP 5> = 5.5.0, PHP 7) –

0

В примере вывода у вас есть дубликаты ключей в массивах - это не будет работать. Ниже более или менее делает то, что вы после

$src=array(
    array('id'=>1,'sht'=>'L','tm'=>'tttt'), 
    array('id'=>7,'tm'=>'xyz'), 
    array('id'=>12,'hand'=>'R'), 
    array('id'=>20), 
); 
$out=array(); 

function get($item,$key,$find){ 
    global $out; 
    if($key==$find)$out[$key][]=$item; 
} 

array_walk_recursive($src,'get','id'); 
array_walk_recursive($src,'get','tm'); 
array_walk_recursive($src,'get','sht'); 

echo '<pre>',print_r($out,true),'</pre>'; 
+0

Работает в php5 до php7. BTY правильное решение –

+0

странное - в соответствии с руководством '(PHP 5> = 5.5.0, PHP 7)' У меня PHP 5.3.2 на win7 и нет функции 'array_column' ~ Мне хотелось бы иногда :( – RamRaider

+0

Мне нужно проверить, если это действительно странно –

0

в растворе с использованием array_walk_recursive функции:

// $arr is your initial array 
$grouped = []; 
array_walk_recursive($arr, function($v, $k) use(&$grouped){ 
    (isset($grouped[$k]))? $grouped[$k][] = $v : $grouped[$k] = [$v]; 
}); 

print_r($grouped); 

DEMO link

+0

работает в php5 для php7. BTY правильное решение –

+0

$ обр = Массив ( Н => Массив ( 'ID' => 1, 'SHT' => 'L', 'тМ' => 'TTTT', ), S => Массив ( 'ID' => 7, 'тМ' => 'XYZ' ), F => Массив ( «идентификатор '=> 12, 'рука'=> 'R' ), G => Массив ( 'ID'=> 20 ) ); Массив ( [ID] => Массив ( [Н] => 1 [S] => 7 [F] => 12 [G] => 20 ) ...... Как это возможно – James

+0

@James, вы уже приняли ответ AlokPatel. Что вам нужно? – RomanPerekhrest