有没有更好的方法来执行此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开发人员,但我想我上面提出的方式不是最有效的吗?
由于
答案 0 :(得分:3)
if($result) {
foreach($result as $index=>$result_row) {
if( !$result_row["title"] ) {
$result[$index]["title"] = "untitled";
}
}
}
你不需要数数。这很有效率。
答案 1 :(得分:3)
if ($result)
{
foreach($result as &$result_row)
{
if(!$result_row['title'])
{
$result_row['title'] = 'untitled';
}
}
}
此外,如果某位年轻朋克导演发布名为0
的电影,您可能需要使用除布尔演员之外的其他内容来检查标题是否存在。
您可以执行if (trim($result_row['title']) == '')
答案 2 :(得分:1)
再多混合@ Luke的回答......
if($result) {
foreach($result as &$result_row) { // <--- Add & here
if($result_row['title'] == '') {
$result_row['title'] = 'untitled';
}
}
}
关键是&amp;在foreach语句中$ result_row之前。这使它成为一个参考的foreach。没有它,$ result_row的值是副本,而不是原始副本。你的循环将完成并完成所有处理,但不会保留。
提高效率的唯一方法是查看数据的来源。如果您是从数据库中检索它,是否可以使用“无标题”值保存每条记录作为默认值,这样您以后就不需要返回并输入值了?
答案 3 :(得分:1)
另一种选择可能是json_encode
+ str_replace()
,然后是json_decode()
:
$data = array
(
0 => array
(
'title' => '',
'body' => 'empty',
),
1 => array
(
'title' => 'set',
'body' => 'not-empty',
),
);
$data = json_encode($data); // [{"title":"","body":"empty"},{"title":"set","body":"not-empty"}]
$data = json_decode(str_replace('"title":""', '"title":"untitled"', $data), true);
作为一个单行:
$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
)
)
我不确定这是否更有效(我怀疑它,但你可以对它进行基准测试),但至少它是一种不同的方式做同样的事情并且应该正常工作 - 你必须关心多维数组如果您在其他地方使用title
索引。
答案 4 :(得分:0)
<?php
$myArr = array (array("title" => "sdsdsdsd", "body" => "ssdsd"),
array("title" => "", "body" => "sdsdsd") );
array_walk_recursive($myArr, "convertTitle");
var_dump($myArr);
function convertTitle(&$item, $key) {
if ($key=='title' && empty($item)) {$item = "untitled";}
}
?>
答案 5 :(得分:0)
如果你想要甜和短,试试这个
$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);
empty()
将完成这项工作,请参阅文档http://www.php.net/manual/en/function.empty.php