2017-02-15 15 views
1

Привет Я пытаюсь преобразовать строку смешивания в массив, но не смог получить точный вывод.Попытка конвертировать микс строку в массив, но не удалось получить точный вывод

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

Ниже мой код, что я пытался до сих пор:

$customstring = "Eye Width=3/4 in|Finish=Nickel|Hook Opening=7/16 in|Locking Type=Spring Loaded Plunger|Material=Zinc Die Cast|Mounting=Swivel Eye|Overall Length [Nom]=3 1/2 in|Type=Swiveled Securing Hook|Wt.=0.09 lb"; 

echo "String :<br>".$customstring; 
$testarray = explode("|",$customstring); 

echo "ARRAY<br><pre>"; 
print_r($testarray); 

AS выход я получаю ниже:

Array 
(
    [0] => Eye Width=3/4 in 
    [1] => Finish=Nickel 
    [2] => Hook Opening=7/16 in 
    [3] => Locking Type=Spring Loaded Plunger 
    [4] => Material=Zinc Die Cast 
    [5] => Mounting=Swivel Eye 
    [6] => Overall Length [Nom]=3 1/2 in 
    [7] => Type=Swiveled Securing Hook 
    [8] => Wt.=0.09 lb 
) 

Но я хочу удалить это значение «=» равным и сделать левое значение как ключ и вправо как значение. см. мой ожидаемый результат ниже.

Но мой Ожидаемый выход таков:

Array 
(
    [Eye Width] => 3/4 in 
    [Finish] => Nickel 
    [Hook Opening] => 7/16 in 
    [Locking Type] => Spring Loaded Plunger 
    [Material] => Zinc Die Cast 
    [Mounting] => Swivel Eye 
    [Overall Length [Nom]] => 3 1/2 in 
    [Type] => Swiveled Securing Hook 
    [Wt.] => 0.09 lb 
) 

Продвинутые Благодаря

ответ

1

Два подхода показаны последовательно:

1) Использовать дополнительную функцию explode в сочетании с list Функция:

$customstring = "Eye Width=3/4 in|Finish=Nickel|Hook Opening=7/16 in|Locking Type=Spring Loaded Plunger|Material=Zinc Die Cast|Mounting=Swivel Eye|Overall Length [Nom]=3 1/2 in|Type=Swiveled Securing Hook|Wt.=0.09 lb"; 

$pairs = explode("|", $customstring); 
$result = []; 
foreach ($pairs as $p) { 
    list($k, $v) = explode('=', $p); 
    $result[$k] = $v; 
} 

print_r($result); 

2) Другим альтернативным решением было бы использовать preg_match_all и array_combine функции:

$customstring = "Eye Width=3/4 in|Finish=Nickel|Hook Opening=7/16 in|Locking Type=Spring Loaded Plunger|Material=Zinc Die Cast|Mounting=Swivel Eye|Overall Length [Nom]=3 1/2 in|Type=Swiveled Securing Hook|Wt.=0.09 lb"; 
preg_match_all("/([^=|]+)=([^+|]+)/", $customstring, $m); 
$result = array_combine($m[1], $m[2]); 

print_r($result); 

Выходной сигнал (то же самое для обоих подходов):

Array 
(
    [Eye Width] => 3/4 in 
    [Finish] => Nickel 
    [Hook Opening] => 7/16 in 
    [Locking Type] => Spring Loaded Plunger 
    [Material] => Zinc Die Cast 
    [Mounting] => Swivel Eye 
    [Overall Length [Nom]] => 3 1/2 in 
    [Type] => Swiveled Securing Hook 
    [Wt.] => 0.09 lb 
) 
+0

работ как шарм !!! ваше первое решение прост и сортируется !!Большое вам спасибо :) –

+0

@ManthanDave, добро пожаловать – RomanPerekhrest

1

я петлю через новый массив и взрываются каждый элемент на = характер.

foreach($testarray as $item){ 
    $arr = explode("=", $item); 
    $testarray[$arr[0]] = $arr[1]; 
} 

Только вопрос вы бы тогда нужно привести в порядок $testarray для удаления цифровых элементов по ключу.

Чтобы это исправить, я бы просто создать окончательный массив вместо

foreach($testarray as $item){ 
    $arr = explode("=", $item); 
    $final[$arr[0]] = $arr[1]; 
} 
+0

Спасибо за помощь :) –

1
<?php 

$string = "Eye Width=3/4 in|Finish=Nickel|Hook Opening=7/16 in|Locking Type=Spring Loaded Plunger|Material=Zinc Die Cast|Mounting=Swivel Eye|Overall Length [Nom]=3 1/2 in|Type=Swiveled Securing Hook|Wt.=0.09 lb"; 

$formed_data = explode("|", $string); 
$desired_data = []; 
foreach ($formed_data as $single_string) { 
    $words= explode("=", $single_string); 
    $desired_data[$words[0]] = $words[1]; 
} 
var_dump($desired_data); 
/** 
* Output 
*/ 
array(9) { 
    ["Eye Width"]=> 
    string(6) "3/4 in" 
    ["Finish"]=> 
    string(6) "Nickel" 
    ["Hook Opening"]=> 
    string(7) "7/16 in" 
    ["Locking Type"]=> 
    string(21) "Spring Loaded Plunger" 
    ["Material"]=> 
    string(13) "Zinc Die Cast" 
    ["Mounting"]=> 
    string(10) "Swivel Eye" 
    ["Overall Length [Nom]"]=> 
    string(8) "3 1/2 in" 
    ["Type"]=> 
    string(22) "Swiveled Securing Hook" 
    ["Wt."]=> 
    string(7) "0.09 lb" 
} 
[Finished in 0.0s] 

С помощью Foreach вы можете получить желаемый результат

+0

Спасибо за помощь :) –

1

@ Мантен Дэйв просто делает с Еогеаспом с сделать состояние, как показано ниже:

<?php 
    $customstring = "Eye Width=3/4 in|Finish=Nickel|Hook Opening=7/16 in|Locking Type=Spring Loaded Plunger|Material=Zinc Die Cast|Mounting=Swivel Eye|Overall Length [Nom]=3 1/2 in|Type=Swiveled Securing Hook|Wt.=0.09 lb"; 
    echo "String :<br>".$customstring; 
    $testarray = explode("|",$customstring); 

    echo "ARRAY<br><pre>"; 
    print_r($testarray); // before 
    foreach($testarray as $key => $val){ 
     if(strpos($val, "=") || strpos($val, "=") == "0"){ 
      $temp = explode("=", $val); 
      $testarray[$key] = $temp[1]; 
     } 
    } 
    echo "ARRAY<br><pre>"; 
    print_r($testarray); // after 
+0

Спасибо за помощь :) –

+0

ваш прием :) –