数组中的PHP文本字符串

时间:2015-01-29 12:48:17

标签: php arrays string

我这里有一个简单的问题。我知道有一个非常简单的解决方案,但我无法弄清楚。所以我从用户那里得到文本输入并将它们存储在一个数组中,现在的问题是如果文本中有逗号,,它会弄乱数组。

例如,如果用户输入:

Proin tincidunt velit turpis. Ut eu tempus tellus, vel dapibus sem ultrices sollicitudin justo lorem sit amit. Donec nec risus vulputate

输出为:

vel dapibus sem ultrices sollicitudin justo lorem sit amit. Donec nec risus vulputate

以下是我正在使用的代码:

$descText = explode( ",", $atts['desc'] );

// Store the descriptions in $textArray array.
foreach ($descText as $desc) {
    $textArray[]  = $desc;
}

更新 所以我在$descText中收到了来自用户的三个输入,所以如果其中任何一个输入中包含一个逗号,,那么它会忽略句子的其余部分。

2 个答案:

答案 0 :(得分:3)

您所说的是用户可以输入以逗号分隔的字符串。如果其中一个字符串包含逗号,则它也会在该逗号上拆分,并且您不希望这样。

您需要使用不能出现在字符串中的其他分隔符,或者您需要转义特殊字符,例如使用\。例如,如果您有以下字符串:

Hello, bye
Hello world

你会逃脱逗号,然后合并它们:

Hello\, bye,Hello world

然后您可以使用preg_split(..)分割它们。

$a = "Hello\, bye,Hello world";
$b = preg_split( '/(?<!\\\\),/', $a );
var_dump( $b );

将作为输出:

array(2) {
  [0]=>
  string(11) "Hello\, bye"
  [1]=>
  string(11) "Hello world"
}

答案 1 :(得分:1)

好的,最后我已经从问题中恢复过来了。我正在寻找的实际解决方案并不多,但它可以完成工作。以下是该问题的问题和解决方案。希望它可以帮助别人。

问题:

我创建了一个WordPress短代码,其中我得到了两个东西,一个音频链接和描述。这两个参数都包含三个逗号分隔的参数。所以它会是这样的:

[shortcode audio="one, two, three" desc="one, two, three"]

要在一个变量中获取多个参数,我必须使用explode()以便它可以分开。现在,如果其中一个desc包含逗号,,那么它将被处理为不同的参数。所以以下为我创造了问题

[shortcode audio="one, two, three" desc="The text, The,text , The text"]

注意desc变量中的第二个参数。它包含一个额外的逗号,因此将进程作为单独的参数。

解决方案:

解决方案不是完美的解决方案,但它完成了工作。我做的是我取代了&#39;,&#39;分隔符为&#39; *&#39;所以现在我的短代码看起来像这样:

[shortcode audio="one * two * three" desc="The text * The,text * The text"]

守则:

function header_custom_box($atts) {

    $atts = shortcode_atts( array( 'audio' => '', 'desc' => ''), $atts, 'header-custom-box' );

    // Create Empty Arrays to store differnt mp3 links and descriptions.
    $posts = array();
    $audioArray = array();
    $textArray = array();
    $postCount = 3;

    // Load the Parameters
    $audioFiles = explode( "*", $atts['audio'] );
    $descText = explode( "*", $atts['desc'] );

    // Break if the parameters values are less than required.
    if ( count($audioFiles) < $postCount || count($descText) < $postCount) {
        echo "You need to provide atleast three links and descriptions. Please check the shortcode again!";
        exit;
    } 

    // Create audio with mp3 files in WordPress
    foreach ($audioFiles as $audioFile) {
        $attr = array(
        'src'      => trim($audioFile),
        'loop'     => '',
        'autoplay' => '',
        'preload' => 'none'
        );
        $audioArray[] = wp_audio_shortcode( $attr );
    }

    // Store the descriptions in $textArray array.
    foreach ($descText as $desc) {
        $textArray[]  = trim($desc);
    }

    // Format the post in HTML and store them in $posts array.
    $counter = 0;
    $buf = '';

    while ($counter < $postCount) { 
        $buf = '';
        $buf .= '<div class="header-tab-box">';
        $buf .= '<div class="audio-text"><h2>Your Daily Audio:</h2> <br/>';
        $buf .= $textArray[$counter];
        $buf .= '</div>';
        $buf .= '<div class="audio-player">';
        $buf .= $audioArray[$counter];
        $buf .= '</div>';
        $buf .= '</div>';
        $posts[$counter] = $buf;
        $counter++;
    }

    // Scheduling the returned posts.
    $currentDay = date("D");
    $postOne = $posts[0];
    $postTwo = $posts[1];
    $postThree = $posts[2];

    if ($currentDay == "Sat" || $currentDay == "Sun" || $currentDay == "Mon" || $currentDay == "Tue") {
        return $postOne;
    } elseif ($currentDay == "Wed" || $currentDay == "Thu") {
        return $postTwo;
    } elseif ($currentDay == "Fri" ) {
        return $postThree;
    }

}
add_shortcode( 'header-custom-box', 'header_custom_box' );

希望这有帮助!

谢谢大家..