2012-03-25 2 views
0

Что я хочу сделать, так это то, что я создаю динамический массив php. Я не знаю об элементах в массиве. позволяю сказать, что у меня есть массив как этотКак нарезать php-массив

$mix_array =array('1','3','6','1','5','3','6','5','1','7','3','9'); 

я хочу нарезка этого array.i хочет создавать массивы из вышеприведенного массива, но из общих элементов, как

$array_1 = ('1','1','1'); 
$array_2 = ('3','3','3'); 
$array_3 = ('6','6'); 
$array_4 = ('5','5'); 
$array_5 = ('9'); 
$array_6 = ('7'); 

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

+0

array_slice(), пытаясь пересекаются, но не достаточно хорошо –

ответ

2

Есть несколько способы сделать это, вот пример (кстати, довольно неэффективен, но достаточно, если это короткая работа):

<?php 
$mix_array = array('1','3','6','1','5','3','6','5','1','7','3','9'); 
$sliced_array = array(); 

foreach($mix_array as $k => $v) { 
    if(count($sliced_array[$v]) > 0) { 
     array_push($sliced_array[$v], $v); 
    } else { 
     $sliced_array[$v] = array($v); 
    } 
} 
?> 

Вы должны взглянуть на http://es.php.net/manual/en/ref.array.php

2

Лучше сделайте assosative массив вместо ввода $array_1, $array_2. И вместо того, чтобы сделать массив с теми же значениями, как array('1', '1', '1'), вы можете просто сохранить количество стоимости как array('1' => 3)

$mix_array = array ('1','3','6','1','5','3','6','5','1','7','3','9'); 
$group_array = array(); 
foreach ($mix_array as $value) { 
    if(isset($group_array[$value])) { 
     $group_array[$value]++; 
    } 
    else { 
     $group_array[$value] = 1; 
    } 
} 

print_r($group_array); 

Результат

Array 
(
[1] => 3 
[3] => 3 
[6] => 2 
[5] => 2 
[7] => 1 
[9] => 1 
) 

Или, как Джош сказал, просто используйте array_count_values()

+2

Уроженец функция уже существует для этого, [ 'array_count_values ​​($ обр)'] (HTTP: // PHP. нетто/ручной/EN/function.array-кол-values.php). – Josh

+0

@ Josh Спасибо +) – safarov

1

Вы можете использовать array_count_values для этого:

$array = array_count_values($mix_array); 
/* $array will have the following content: 
    $array{ 
     1 => 3 
     3 => 3 
     6 => 2 
    ... 
*/ 

Если вам действительно нужно нарезанную версию, то вы можете использовать array_fill

$result = array(); 
$i = 0; 
for($array as $key=>$value) 
    $result[$i++] = array_fill(0,$value,$key); 
/* $result[0] = (1,1,1), 
    $result[1] = (3,3,3), 
    ... 
*/ 
Смежные вопросы