我正在尝试使用以下“foreach”循环从一个现有数组($ array)中创建2个新数组。但是我不确定它是否正确:
$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),创建两个单独的数组:所有拥有数字的用户(这是我们拥有的功能)以及其他所有电子邮件。
所以结果将是2个新的数组,看起来像这样:
对于特定的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')}
答案 0 :(得分:3)
首先要做的事情很少:
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));
}
}
答案 1 :(得分:1)
我想这就是你想要实现的目标:
$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);
}
}
在你的代码中,while($ array)不在数组上循环,它循环直到$ array == false 因为$ array不会在你的循环中改变它将永远不会进入或循环,或永远不会退出 通常,使用foreach循环可以使代码更容易理解
答案 2 :(得分:0)
假设这不是某种家庭作业,为什么不这样做呢:
$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()
功能非常有效。