有没有一种简单的方法可以使用PHP从数组中删除元素,这样foreach ($array)就不再包含该元素了?
我认为设置它null会这样做,但显然它不起作用.
我有阵列,我不得不取消一些索引,所以现在它看起来像
$myarray [0] a->1
[1] a-7 b->3
[3] a-8 b->6
[4] a-3 b->2
Run Code Online (Sandbox Code Playgroud)
你可以看到[2]缺少所有我需要做的是重置索引,所以他们显示[0] - [3].
考虑:
[name] => Array ( [1] => name#1
[2] => name#2
[3] => name#3
[4] => name#4
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
)
$name = $_POST['name']
Run Code Online (Sandbox Code Playgroud)
我想要结果4.
count ($name) = 9
count (isset($name)) = 1
count (!empty($name)) = 1
Run Code Online (Sandbox Code Playgroud)
我认为最后一个会完成我需要的东西,但它不是(空条目来自表单上未填充的输入).
PHP 5.3提供匿名函数.
我应该使用它们还是避免使用它们?如果是这样,怎么样?
编辑 ; 刚刚用php匿名函数发现了一些不错的技巧......
$container = new DependencyInjectionContainer();
$container->mail = function($container) {};
$conteiner->db = function($container) {};
$container->memcache = function($container) {};
Run Code Online (Sandbox Code Playgroud) 我有一个阵列
数组([0] => 0 [1] => [2] => 3 [3] =>)
我想从中删除空值,结果应该是这样的
数组([0] => 0 [1] => 3)我不想从数组中删除0值.
我有一个关联数组: $csv_arr
Array
(
[0] => Array
(
[Enfalac] => alpha linolenic acid 300 mg
[Enfapro] => alpha linolenic acid 200 mg
)
[1] => Array
(
[Enfalac] => arachidonic acid 170 mg
[Enfapro] =>
)
[2] => Array
(
[Enfalac] =>
[Enfapro] =>
)
[3] => Array
(
[Enfalac] => calcium 410 mg
[Enfapro] => calcium 550 mg
)
)
Run Code Online (Sandbox Code Playgroud)
如何删除所有完全空的条目,例如$csv_arr[2]保留部分条目,例如$csv_arr[1]
我试过$csv_arr = array_filter(array_map('array_filter', $csv_arr));但是这会删除空元素:$csv_arr[1]['Enfapro']
谢谢
我目前使用以下命令将所有请求重定向到 index.php 文件:
<IfModule mod_rewrite.c>
RewriteEngine on
# base path, if not the root directory
RewriteBase /dev/public/
# direct all requests to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php
</IfModule>
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它限制我的代码只能在启用了 mod_rewrite 的服务器上运行。所以我想知道,有没有办法在不使用 .htaccess 的情况下模拟这种行为?其他框架是如何做到的?
我已经决定使用闭包来代替我的回调create_function,因此只支持PHP> 5.3,主要是因为增加了可调试性,也因为我假设(他们对假设的说法是什么?)是on-the的开销. -fly编译create_function在我的情况下可能会抵消任何额外的比较,并且必须在函数内进行.
这可能仍然是这种情况(对于我的应用程序)并且需要进一步测试,但我对这个(非常)简单测试的输出感兴趣,该测试显示该create_function方法的速度比关闭时快两倍以上只有四个条件(和concats).显然在我的测试用例中没有进行额外的处理,这就是大部分速度将会获得或丢失的地方,但是在你没有多少额外处理但是有很多条件(可以删除)和回调被调用足够多次我开始认为使用它可能更好create_function.
然而,create_function和之间有明显的相似性eval,我对它很谨慎.
所以主要的问题是创建的匿名函数create_function和闭包函数之间的区别是什么?
我正在考虑的一些具体问题,create_function甚至可以在eval禁用功能时使用?并且,我确信我最近在某处读到,create_function即使声明为内部函数,函数也会污染全局(或类)命名空间,但闭包不会.我现在找不到对此的引用,但这些陈述中的一个或两个都是真的吗?
这是我跑的小测试:
<?php
function foo($a=true, $b=true, $c=true, $d=true)
{
$inner1 = create_function(
'',
'$r = \''.($a ? 'a' : '').
($b ? 'b' : '').
($c ? 'c' : '').
($d ? 'd' : '').'\';
return $r;'
);
$inner2 = function() use ($a, $b, $c, $d)
{
$r = '';
if($a) { $r .= …Run Code Online (Sandbox Code Playgroud) 警告:array_filter()期望参数2是有效的回调,找不到函数'empty'或函数名称无效....
为什么空被认为是无效的回调?
$arr = array_filter($arr, 'empty');
Run Code Online (Sandbox Code Playgroud)
这有效: if(empty($arr['foo'])) die();
可能重复:
删除空数组元素
我想从数组中删除空元素.我有一个字符串,它被设置为一个数组explode().然后我array_filter()用来删除空元素.但这不起作用.见下面的代码:
$location = "http://www.bespike.com/Packages.gz";
$handle = fopen($location, "rb");
$source_code = stream_get_contents($handle);
$source_code = gzdecode($source_code);
$source_code = str_replace("\n", ":ben:", $source_code);
$list = explode(":ben:", $source_code);
print_r($list);
Run Code Online (Sandbox Code Playgroud)
但它不起作用,$list仍然有空元素.我也尝试过使用该empty()功能,但结果是一样的.