Объединение подстрок в php - PullRequest
0 голосов
/ 21 октября 2018

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

<?php
$array = array(
   "1" => "android",
   "2" => "apple",
   "3" => " iphone 6",
   "4" => " iphone 5",
   "5" => " iphone",
   "6" => "blackberry",);

$phone = [];
foreach ($array as $value) {
    if (substr($value, 0, 1)==' ') {  
        $apple = (end($phone));
        $string = [$apple = $apple.$value];
    } else {
        $phone[] = $value;
    }
}
?>

Если я попытаюсь соединить строки, я получу три строки вместо одной.

var_dump ($apple=$apple.$value);

'apple iphone 6 iphone 6'
'apple iphone 5 iphone 5'
'apple iphone iphone'

Но я бы хотел такую ​​строку.

'apple iphone 6 iphone 5 iphone'

Ответы [ 4 ]

0 голосов
/ 21 октября 2018

Я немного изменил ваш код (на самом деле я удалил 2 строки и добавил 1).Вы можете добиться желаемых результатов с этим:

$array = array(
   "1" => "android",
   "2" => "apple",
   "3" => " iphone 6",
   "4" => " iphone 5",
   "5" => " iphone",
   "6" => "blackberry",);

$phone = [];
foreach ($array as $value) {
    if (substr($value, 0, 1)==' ') {  
        $phone[count($phone)-1] .= $value;
    } else {
        $phone[] = $value;
    }
}

print_r($phone);

Я использовал это

$phone[count($phone)-1] .= $value;

вместо этого

$apple = (end($phone));
$string = [$apple = $apple.$value];
0 голосов
/ 21 октября 2018

Вы можете использовать join(), как я сделал ниже.

<?php

$array = array(
    "1" => "android",
    "2" => "apple",
    "3" => " iphone 5",
    "4" => " iphone 6",
    "5" => " iphone",
    "6" => "blackberry",
);
$stringList = array();

foreach($array as $value) {
    if(substr($value,0,1)==" ") {
        array_push($stringList,$value);
    }else{
        // do something else
    }
}

$string = join("",$stringList);
var_dump($string);
0 голосов
/ 21 октября 2018

Мне кажется, я понимаю, это случай добавления (в этом примере) любой записи, начинающейся с пробела, перед записью непосредственно перед этим в массиве.

Это просматривает массив и каждый разнаходит пробел, который добавляет запись в конец построенной строки.Затем, когда пробела нет, он проверит наличие каких-либо дополнений и добавит его к выходным значениям ($list) и сбросит вывод в текст.

$array = array(
    "1" => "android",
    "2" => "apple",
    "3" => " iphone 6",
    "4" => " iphone 5",
    "5" => " iphone",
    "6" => "blackberry",
    "7" => " Curve"
);

$list = [];
$out = "";
$added = false;
foreach ($array as $value) {
    if (substr($value, 0, 1) == ' ') {
        $out .= $value;
        $added = true;
    }
    else    {
        if( $added )   {
            $list[] = $out;
        }
        $out = $value;
        $added = false;
    }
}
if( $added )   {
    $list[] = $out;
}
print_r( $list );

Это выводит (обратите внимание, я добавил Кривая - телефон, сидящий на моем столе банкомат: - /) ...

Array
(
    [0] => apple iphone 6 iphone 5 iphone
    [1] => blackberry Curve
)
0 голосов
/ 21 октября 2018

Если вы можете, вы, вероятно, должны изменить массив данных на что-то вроде этого.

<?php
$array = [
    "android",
    "apple" => [
        "iphone 6",
        "iphone 5",
        "iphone",
    ],
    "blackberry",
];

$phones = [];
foreach ($array as $key => $value) {
    if(is_array($value)) {
        $phones[] = $key . ' ' . join(' ', $value);
    } else {
        $phones[] = $value;
    }
}

foreach ($phones as $phone) {
    echo $phone."\n";
}

Пример: http://sandbox.onlinephpfunctions.com/code/470506a86804886345d233c373ac834e43ef818d

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

...