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++; } }

有没有更好的方法来编写PHP代码?我所做的是在数组中循环,如果标题字段为空,则替换它

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类型的杂耍终于让我发疯了。。。我一直认为这是真的。