2011-01-24 4 views
1

В моих манипуляций я получил массив содержит данные, как это:преобразовать существующий массив в новый?

$A = Array 
    (
     [0] => 0302 sa 
      [1] => 0602 sdsa 
      [2] => 0602 sada 
      [3] => 0802 sadasdasd 
     [4] => 0302 sada 
      [5] => 0602 saa 
      [6] => 0602 sdad 
      [7] => 0802 sds 
     [8] => 0302 sda 
      [9] => 0602 sdada 
      [10] => 0602 sada 
      [11] => 0802 sdada 
     [12] => 0302 sda 
      [13] => 0602 sdads 
      [14] => 0602 saddas 
      [15] => 0802 sadas 
    ) 

выход будет новый массив

$B = Array 
     (//03 
     [0] => array( 
        [0] => 0602 sdsa,//06 
        [1] => 0602 sada //06 
     ) 
     //03 
     [1] => array(
       [0] => 0602 saa,//06 
       [1] => 0602 sdad //06 
       ) 
       //03 
     [2] => array(
       [0] => 0602 sdada,//06 
       [1] => 0602 sada //06 
     ) 
      //03 
     [3] =>array(
       [0] => 0602 sdads,//06 
       [1] => 0602 saddas//06 
     ) 
    ) 

TRY

function TODO($A){ 
    $B = array(); 
    foreach ($A as $key=>$line){ 
if(substr($line,0,2)=="03"){ 
    $B[] = ??? 
    } 
} 

Кто может помочь мне решить эту проблему ?

+0

Итак, вы хотите, чтобы новый субарфей был создан в любое время, когда элемент имеет значение «03 ...»? – Sampson

+0

да, 03 станет основным массивом, 06 будут элементами 03 – kn3l

+0

Какова логика манипуляции данными здесь? Если x = xxx, то назначьте его y, если x2 = xxx2, то назначьте его y2 ... Не могли бы вы рассказать нам? – Andreyco

ответ

1
 
$B = array(); 
foreach($a as $line) { 
    if(substr($line,0,2)=="03"){ 
    if(isset($tmpArray)) $B[] = $tmpArray; 
    $tmpArray = array(); 
    } else { 
    if(!isset($tmpArray) continue; 
    $tmpArray[] = $line; 
    } 
} 
if(isset($tmpArray)) $B[] = $tmpArray; 

Просто простая идея :-)

+0

Это добавит строку со значением '0802'. – codaddict

2

Try:

$B = array(); 
$flag = 0; 
foreach ($A as $key=>$line){ 
     if($flag != 0) { 
       if($flag == 1) { 
         $temp = array(); 
         $temp[0] = $line; 
         $flag++; 
       } else { 
         $temp[1] = $line; 
         $B[] = $temp; 
         $flag = 0; 
       } 
     } 
     if(substr($line,0,2)=="03"){ 
       $flag = 1; 
     } 
} 

Ideone Link

Примечание: Я предполагаю, что два 06 «S будет следовать сразу за 03.

+0

если я добавил 15 => '0602 Added1', 16 => '0602 Added2' У меня проблемы. Пожалуйста, посмотрите на http://www.ideone.com/homdI, добавленные элементы. – kn3l

+0

@python: Ваше намерение не очень ясное. Вы хотите добавить все '06' (независимо от того, сколько) после' 06'? – codaddict

+0

Нигде спасибо большое., – kn3l