2015-10-22 2 views
0

В качестве входа есть ассоциативный массив вроде этого:Как разбить массив элементов на основе внутреннего элемента значения?

$array[0]['id'] = 0; 
$array[0]['name'] = 'first name'; 
$array[0]['phone'] = '+1 515 111 111'; 
$array[0]['for_id'] = 1; 

$array[1]['id'] = 1; 
$array[1]['name'] = 'first name1'; 
$array[1]['phone'] = '+1 515 222 222'; 
$array[1]['for_id'] = 1; 

$array[2]['id'] = 0; 
$array[2]['name'] = 'first name2'; 
$array[2]['phone'] = '+1 515 333 333'; 
$array[2]['for_id'] = 1; 

$array[3]['id'] = 0; 
$array[3]['name'] = 'first name3'; 
$array[3]['phone'] = '+1 515 444 444'; 
$array[3]['for_id'] = 2; 

$array[4]['id'] = 0; 
$array[4]['name'] = 'first name4'; 
$array[4]['phone'] = '+1 515 555 555'; 
$array[4]['for_id'] = 2; 

$array[5]['id'] = 0; 
$array[5]['name'] = 'first name5'; 
$array[5]['phone'] = '+1 515 666 666'; 
$array[5]['for_id'] = 2; 

Как разделить его на N отдельных массивов на основе той же стоимости $array[]['for_id']?

Как $array1 будет содержать все элементы из $array где $array[]['for_id'] == 1; и $array2 с $array[]['for_id'] == 2;?

ответ

1

Просто перебирайте массив и собирайте каждый элемент с тем же for_id в новом массиве.

$t = array(); 
foreach ($array as $item) { 
    if (!isset($t[$item['for_id']]) { 
     $t[$item['for_id']] = array(); 
    } 

    $t[$item['for_id']][] = $item; 
} 
+0

Именно то, что мне нужно было –

1

здесь подобный способ Филипс, но делает именно то, что вы хотите, то есть получать имя переменной, чтобы соответствовать for_id значение ключа

$array[0]['id'] = 0; 
$array[0]['name'] = 'first name'; 
$array[0]['phone'] = '+1 515 111 111'; 
$array[0]['for_id'] = 1; 

$array[1]['id'] = 1; 
$array[1]['name'] = 'first name1'; 
$array[1]['phone'] = '+1 515 222 222'; 
$array[1]['for_id'] = 1; 

$array[2]['id'] = 0; 
$array[2]['name'] = 'first name2'; 
$array[2]['phone'] = '+1 515 333 333'; 
$array[2]['for_id'] = 1; 

$array[3]['id'] = 0; 
$array[3]['name'] = 'first name3'; 
$array[3]['phone'] = '+1 515 444 444'; 
$array[3]['for_id'] = 2; 

$array[4]['id'] = 0; 
$array[4]['name'] = 'first name4'; 
$array[4]['phone'] = '+1 515 555 555'; 
$array[4]['for_id'] = 2; 

$array[5]['id'] = 0; 
$array[5]['name'] = 'first name5'; 
$array[5]['phone'] = '+1 515 666 666'; 
$array[5]['for_id'] = 2; 



foreach($array as $arr){ 
    $int = $arr['for_id']; 
    $arrName = 'array' . $int; 

    if(!isset($$arrName)) 
    { 
     $$arrName =array(); 
    } 
    array_push($$arrName, $arr); 

} 

echo 'First array ' . json_encode($array1); 
echo 'Second array ' . json_encode($array2); 
+0

Вы могли бы также петли эхо, не так ли? – FirstOne

+0

Что я добавил в качестве ответа, просто показывает, как получить $ array1 и $ array2 из набора данных/($ array) по запросу starnzd. Результатом является неконтролируемое и неструктурированное количество массивов после запуска цикла foreach, и все зависит от реального значения массива $. Вы можете запустить foreach ($ array1 as $ arr) после того, как это вы спрашиваете. Я воспользовался json_encode, поскольку он дает JSON-представление результата, которое легче читать, чем результат var_dump – Bizmate

Смежные вопросы