我正试图使用下面的"foreach"循环,从一个现有数组($array)中创建两个新数组。然而,我不确定它是正确的:
$emails = array();
$numbers = array();
while($array){
$entry = $array['entry1'];
$number = number($entry);
if(isset($number) && (strlen($number) > 9)){
$numbers[] = array('entry1' => $entry, 'number' => $number);
}
else{
$email = email($entry);
$emails[] = array('entry1' => $entry, 'email' => $email);
}
}
内部数组是否应该具有[]
?我甚至需要在while循环之外启动数组吗?还是跳过它?使用foreach循环更好吗?
更新:
好吧,这是原始数组:它是从mysql查询中提取的,由两个数字组成:
{('uid1','uid2'),('uid1','uid5'),('uid9','uid93'),....)
每行中可能还有其他数据,但这是仅有的两个真正重要的数据点。
我试图为一个特定的用户($entry)创建两个单独的数组:所有有数字的用户(这是我们的一个函数),以及他们的所有其他电子邮件。因此,结果将是两个新的数组,看起来如下:对于特定的uid79887
:
numbers array: {('uid8','xxx-xxxx-xxx'),('uid34','yyy-yyyy-yyy'),('uid654','vvv-vvvv-vvv')}
emails array: {('uid4','mmm@mmm.com'),('uid1','lll@lll.com'),('uid55554','ppp@ppp.com')}
首先有几件事:
- 初始化变量是一种很好的做法,只需执行即可(这有很多好处)
while($array)
是什么样的测试?若要从数组中删除项目,则应使用foreach( $array as $entry)
或while( count( $array))
- 为什么在
isset( $number)
总是设置的情况下测试它?它是初始化的变量。您可能正在检查null
,所以请使用!is_null()
或($number !== null)
。即使它有效,也会产生误导
我猜你的代码应该是这样的:
$emails = array();
$numbers = array();
foreach( $array as $entry){
$entry = isset( $entry['entry1']) ? $entry['entry1'] : null;
$number = number( $entry);
if( strlen($number) > 9 ){ // If $number is empty it will have strlen < 1 .)
$numbers[] = array('entry1' => $entry, 'number' => $number);
} else {
$emails[] = array('entry1' => $entry, 'email' => email( $entry));
}
}
我想这就是你想要实现的:
$emails = $numbers = Array();
foreach($array as $item) {
$e = $item['entry1'];
$number = number($e);
if(strlen($number) > 9) {
$numbers[] = Array('entry1' => $e, 'number' => $number);
}
else {
$email = email($entry);
$emails[] = Array('entry1' => $e, 'email' => $email);
}
}
在代码中,($array)不在数组上循环,而是循环到$array==false由于$array在循环中不会更改,它将永远不会进入或退出循环通常,使用foreach循环生成更易于理解的代码
假设这不是某种家庭作业,为什么不这样做呢:
$emails = array();
$numbers = array();
foreach( $array as $entry )
{
$number = number($entry);
if( $number && strlen($number) > 9 )
{
array_push($numbers, array('entry1' => $entry, 'number' => $number));
}
else
{
array_push($emails, array('entry1' => $entry, 'email' => email($entry)));
}
}
最好使用那些试图滚动自己的内置函数。foreach()
功能运行良好。