【问题标题】:Create string in one character at a time with loop使用循环一次创建一个字符的字符串
【发布时间】:2014-07-06 19:27:32
【问题描述】:

我正在尝试从0 开始创建一周中每个小时的字符串。该字符串的长度为 167 个字符,由 0/1 组成,每个字符表示该小时的 true/false

我知道你可以这样编辑字符串:

$foo = "123456789";
echo $foo[0]; // outs 1
echo $foo[1]; //outs 2

$foo[0] = 1;
$foo[1] = 1;

echo $foo[0]; // outs 1
echo $foo[1]; // outs 1

所以我假设我可以设置一个空白字符串并使用相同的方法来“构建”它。所以我从 0-167 运行一个循环,同时检查“小时”是否在 $hours 数组中。如果是,我在我的字符串中将其设置为 1...如果不是,则将其设置为 0。问题:

1. 设置$inputHours = '' 不起作用,它只会创建 一个数组而不是我想要的字符串。

2. 是否有更优化的方式来检查是否设置了其他小时 比使用in_array 167 次?

//array of selected hours
$hours = array(1, 25, 34, 76, 43)

//create selected hours string from selection
$inputHours = '';

for ($x = 0; $x < 168; $x++) {
    $inputHours[$x] = in_array($x, $hours) ? 1 : 0; 
} 

预期输出将是 $inputHours = '0011010101...',具体取决于是否设置为 167 个字符的总长度。

【问题讨论】:

  • 很好奇,字符串将用于什么,保持选择小时数组似乎更有效
  • 我一直在想一个好方法,将整周的选定时间存储在 sql 中的行中。我最初有 7 行,每行 24... 每天一个,但是查询花费的时间比我想要的要长,因为如果我想为每个“结果”显示整周的时间表,我必须为每个“结果”加入这些行。我今天想到了这个方法。轻松插入,轻松查询,每行一行而不是 7 行,读取值就像 $week[hour#]
  • 坏主意,创建小时表
  • 解释你的想法和推理——这比在数据库中有 168 列或 7 行 24 列要快得多,也更容易。我也不需要只查询整个集合的特定时间。

标签: php arrays string loops for-loop


【解决方案1】:

您可以使用.= 运算符连接一个字符串中的字符,并使用带有in_array() 函数的三元运算符([expression] ? [true] : [false])检查条件:

for($x = 0; $x < 168; $x++)
    $inputHours .= in_array($x, $hours) ? 1 : 0;

Example

【讨论】:

    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多