2014-09-19 4 views
0

У меня есть строка чисел. Числа отображаются в наборах из трех. Я хотел бы изменить второе число в наборе в зависимости от первого числа в наборе.изменить номер в строке php, разделенный запятой

Это мой код.

$value='1 0 0,4 2 0,1 20 0,3 0 0,2 0 0,2 0 0,3 0 0,4 0 0,4 0 0,3 0 0,3 0 0,4 0 0,4 0 0,1 0 0,4 0 0,2 0 0,1 0 0,2 0 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,10 20 0,15 20 0,0 0 0,0 0 0,11 20 0,23 10 0,0 0 0,0 0 0,27 7 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,16 1 0,0 0 0'; 
$resouces_array=explode(',', $value); 

foreach ($resouces_array as $key=> $value) 
{ 
    $first_number =substr($value,0,2); 
    $second_number = explode(' ', $value); 

    // Part where I specify what the second number should be depending on the first number. 
    if($first_number == 23) 
    { 
     $second_number[1]= 50; 
    } 

    //$first_parts= explode(' ', $value); 
    $string_valo= implode(' ' ,$second_number); 
    $after_spli=str_pad($string_valo, 6,','); 
    echo $after_spli; 
} 

Я хочу, чтобы результат был таким.

1 0 0,4 2 0,1 20 0,3 0 0,2 0 0,2 0 0,3 0 0,4 0 0,4 0 0,3 0 0,3 0 0,4 0 0,4 0 0,1 0 0,4 0 0,2 0 0,1 0 0,2 0 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,10 20 0,15 20 0,0 0 0,0 0 0,11 20 0,23 50 0,0 0 0,0 0 0,27 7 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,16 1 0,0 0 0'; 

Но мой код производит это.

1 0 0,4 2 0,1 20 03 0 0,2 0 0,2 0 0,3 0 0,4 0 0,4 0 0,3 0 0,3 0 0,4 0 0,4 0 0,1 0 0,4 0 0,2 0 0,1 0 0,2 0 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,10 20 015 20 00 0 0,0 0 0,11 20 023 50 00 0 0,0 0 0,27 7 00 0 0,0 0 0,0 0 0,0 0 0,0 0 0,16 1 00 0 0, 
+2

Итак, что вы на самом деле хотите совершить с номером? Это довольно неясно – iswinky

+0

По-моему, это было не так уж и неясно. Немного недостатка в английском языке не нужно сразу отмечать его как непонятное. – Rimble

ответ

1
<?php 

$value='1 0 0,4 2 0,1 20 0,3 0 0,2 0 0,2 0 0,3 0 0,4 0 0,4 0 0,3 0 0,3 0 0,4 0 0,4 0 0,1 0 0,4 0 0,2 0 0,1 0 0,2 0 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,10 20 0,15 20 0,0 0 0,0 0 0,11 20 0,23 10 0,0 0 0,0 0 0,27 7 0,0 0 0,0 0 0,0 0 0,0 0 0,0 0 0,16 1 0,0 0 0'; 
echo $value . '</br>'; 
$resouces_array=explode(',', $value); 

$output = array(); 

foreach ($resouces_array as $value) 
{ 
    $numbers = explode(' ', $value); 

    if($numbers[0] == 23) 
    { 
     $numbers[1] = 50; 
    } 

    $output[] = implode(' ', $numbers); 

} 

$output = implode(',', $output); 
echo $output; 

?> 

Проблема у вас была в том, что вы не были должным образом деконструкции и восстановление массива массивов. Выше мой ответ на вашу проблему - двойной взрыв, основанный на , и , а затем двойной разрыв этих разделителей. В цикле он проверяет первый элемент одного из массивов, затем модифицирует второй номер массива. Вы можете поместить это в почти функциональный формат для повторного использования.

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