【问题标题】:Creating strings of X length based on array基于数组创建 X 长度的字符串
【发布时间】:2012-02-28 20:07:12
【问题描述】:

我想遍历一个数组并从该数组创建一个字符串。 但是,每个字符串都需要具有一定的大小(500 字节)。

所以我的数组看起来像:

Array
(
    [0] => Array
        (
            [name] => shirt
            [price] => 1.25
        )

    [1] => Array
        (
            [name] => car
            [price] => 25.10
        )
    ...
)

$str = "";

foreach($arr as $v) {
    $str .= "<name>".$v['name']."</name>";
    $str .= "<price>".$v['price']."</price>";
}

输出应该是这样的:

str1 = '<name>shirt</name><price>1.25</price><name>car</name><price>25.10</price>...' // until 500 bytes or less. 
str2 = '<name>shirt</name><price>1.25</price><name>car</name><price>25.10</price>...' // until 500 bytes or less. 

// 我需要完整的标签。所以我不能有一个看起来像这样的字符串:

str = '<name>flower</name><pri';

【问题讨论】:

  • 为什么不告诉我们为什么要这样做,让我们告诉你正确的方法?
  • 基本上,我需要包含&lt;name&gt;&lt;price&gt; 这两个标签的字符串。所以我想将尽可能多的数组元素推入一个字符串。但既然我知道数组有很多元素,而且我也知道每个字符串必须短于 500 字节,那么我可能需要几个字符串。
  • 您要么需要 500 个字符长的字符串,要么需要遵守标签边界的字符串。你不能两者兼得。
  • 您能详细说明一下吗?

标签: php arrays strlen


【解决方案1】:

将每个片段保存为少于 500 个字符。

$xml = array();
$str = '';
foreach($arr as $v)
{
    $temp = "<name>".$v['name']."</name>";
    $temp .= "<price>".$v['price']."</price>";

    if(mb_strlen($str . $temp) > 500)
    {
        $xml[] = $str;
        $str = '';
    }
    $str = $temp;
}
$xml[] = $str;

print_r($xml);

【讨论】:

    【解决方案2】:

    str_split 听起来不错。

    【讨论】:

    • 很好的默认值,但看起来像上面的 XML,如果这样拆分,它将无效。
    • 你是对的。我在想 Kayla 想将输出分成小块。
    • str_split 的问题在于,它会在错误的位置断开字符串。所有字符串都应包含两个标签:nameprice
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多