Php 替换数组中空值的最有效方法
有没有更好的方法来编写PHP代码?我所做的是在数组中循环,如果标题字段为空,则替换它Php 替换数组中空值的最有效方法,php,arrays,foreach,Php,Arrays,Foreach,有没有更好的方法来编写PHP代码?我所做的是在数组中循环,如果标题字段为空,则替换它 if($result) { $count = 0; foreach($result as $result_row) { if( !$result_row["title"] ) { $result[$count]["title"] = "untitled"; } $count++; } }
if($result)
{
$count = 0;
foreach($result as $result_row)
{
if( !$result_row["title"] )
{
$result[$count]["title"] = "untitled";
}
$count++;
}
}
其中,$result是包含以下数据的数组:
Array
(
[0] => Array
(
[title] => sdsdsdsd
[body] => ssdsd
)
[1] => Array
(
[title] => sdssdsfds
[body] => sdsdsd
)
)
我不是一个经验丰富的PHP开发人员,但我想我上面提出的方法不是最有效的
谢谢
你不需要数一数。效率很高
if ($result)
{
foreach($result as &$result_row)
{
if(!$result_row['title'])
{
$result_row['title'] = 'untitled';
}
}
}
你不需要数一数。效率很高
if ($result)
{
foreach($result as &$result_row)
{
if(!$result_row['title'])
{
$result_row['title'] = 'untitled';
}
}
}
此外,您可能希望使用布尔类型以外的其他方法来检查标题是否存在,以防一些年轻的朋克导演发布一部名为0的电影
您可以执行如下操作:修剪$result\u行['title']==
此外,您可能希望使用布尔类型以外的其他方法来检查标题是否存在,以防一些年轻的朋克导演发布一部名为0的电影
你可以做一些类似的事情,比如修剪$result_row['title']=在@Luke的答案中加入更多的内容
if($result) {
foreach($result as &$result_row) { // <--- Add & here
if($result_row['title'] == '') {
$result_row['title'] = 'untitled';
}
}
}
键是foreach语句中的&before$result\u行。这使它成为一个参照物。否则,$result_行的值是副本,而不是原始值。您的循环将完成并执行所有处理,但它不会被保留
提高效率的唯一方法是查看数据的来源。如果你从数据库中检索它,你能用一个未命名的值作为默认值保存每条记录吗,这样你以后就不需要再返回并输入值了?在@Luke的答案中加入更多内容
if($result) {
foreach($result as &$result_row) { // <--- Add & here
if($result_row['title'] == '') {
$result_row['title'] = 'untitled';
}
}
}
键是foreach语句中的&before$result\u行。这使它成为一个参照物。否则,$result_行的值是副本,而不是原始值。您的循环将完成并执行所有处理,但它不会被保留
提高效率的唯一方法是查看数据的来源。如果要从数据库中检索,是否可以将每个记录保存为默认值,这样以后就不必返回并输入值?也许:
也许:
另一种选择可以是json_编码+str_替换,然后是json_解码: 作为一个班轮:
$data = json_decode(str_replace('"title":""', '"title":"untitled"', json_encode($data)), true);
输出:
Array
(
[0] => Array
(
[title] => untitled
[body] => empty
)
[1] => Array
(
[title] => set
[body] => not-empty
)
)
我不确定这是否更有效,我对此表示怀疑,但您可以对其进行基准测试,但至少这是一种不同的方法,并且应该可以很好地工作-如果您在别处使用标题索引,您必须关心多维数组。另一种选择可能是json_encode+str_replace,然后是json_decode: 作为一个班轮:
$data = json_decode(str_replace('"title":""', '"title":"untitled"', json_encode($data)), true);
输出:
Array
(
[0] => Array
(
[title] => untitled
[body] => empty
)
[1] => Array
(
[title] => set
[body] => not-empty
)
)
我不确定这是否更有效,我对此表示怀疑,但你可以对其进行基准测试,但至少这是一种不同的方法,而且应该可以很好地工作-如果你在其他地方使用标题索引,你必须关心多维数组。如果你想要甜而短,试试这个
$result = array(
array(
'title' => 'foo',
'body' => 'bar'
),
array(
'body' => 'baz'
),
array(
'body' => 'qux'
),
);
foreach($result as &$entry) if (empty($entry['title'])) {
$entry['title'] = 'no val';
}
var_dump($records);
空的就行了,看看文档如果你想要甜的和短的,试试这个
$result = array(
array(
'title' => 'foo',
'body' => 'bar'
),
array(
'body' => 'baz'
),
array(
'body' => 'qux'
),
);
foreach($result as &$entry) if (empty($entry['title'])) {
$entry['title'] = 'no val';
}
var_dump($records);
空的就行了,见文档我会说这可能足够快,除非你有大量行,在这种情况下,你可能会有一些其他问题。我会说这可能足够快,除非你有大量行,在这种情况下,你可能会有一些其他问题。| |=仍然无效;将值指定为引用并不会提高效率。刚才看到Luke的评论,所以我替换了| |=运算符。解释了为什么我在PHP中找不到它,没有这样的动物。| |=仍然无效;将值指定为引用并不会提高效率。刚才看到Luke的评论,所以我替换了| |=运算符。解释了为什么我在PHP中找不到它,没有这样的动物。if$结果在那里做什么?如果$result是一个字符串呢?我可以理解is\u array$结果,但这不计算..是的,is\u array会更好。那只是他原作的复制和粘贴,我没有想到要改变那部分。如果$result在那里做什么?如果$result是一个字符串呢?我可以理解is\u array$结果,但这不计算..是的,is\u array会更好。这只是他原作的复制和粘贴,我没有想到要改变这一部分。有趣的是,开销使这种方法比简单的foreach慢很多倍。这可能会引发另一个问题,但开销是多少?或者您指的是回调函数?很有趣,但开销使此方法比simple foreach慢很多倍。这可能引发另一个问题,但开销是多少?或者您是在引用回调函数?+1以获得正确的引用方法。尽管trim==对0没有帮助。对于PHP“0”==。您需要==。@nikic:'0'==返回false,而0==返回true$结果行['title']将是一个字符串,所以这将很好地工作。哇,似乎PHPs类型的杂耍终于让我发疯了。。。始终认为这会产生正确的结果。正确的参考方法为+1。尽管trim==对0没有帮助。对于PHP
'0' == . 您需要==。@nikic:'0'==返回false,而0==返回true$结果行['title']将是一个字符串,所以这将很好地工作。哇,似乎PHPs类型的杂耍终于让我发疯了。。。我一直认为这是真的。