【问题标题】:Search through nested array, return only url value from one column搜索嵌套数组,仅返回一列中的 url 值
【发布时间】:2014-12-04 21:31:01
【问题描述】:

我有一个看起来像这样的数组,它是由以下生成的:

$file = fopen($savedSource,"r");

            while(! feof($file)) {
                $data = (fgetcsv($file));
            }

Array
(
    [0] => First Name
    [1] => Last Name
    [2] => Title
    [3] => Company / Account
    [4] => Email
    [5] => Lead ID
    [6] => Profile Image
Zelayas
    [7] => Zelayas
    [8] => 
    [9] => Kramer
    [10] => zel@somewhere.com
    [11] => 123456
    [12] => https://media.com/0f48c22.jpg
Kanngiesser
    [13] => Kanngiesser
    [14] => 
    [15] => Johnson
    [16] => kanngie@somewhere.com
    [17] => 7891234
    [18] => https://media.com/135f3b7.jpg

我希望能够将这些 URL 存储到一个简单的(无嵌套)数组中,以便结果变为:

Array
    (
        [0] => https://media.com/0f48c22.jpg
        [1] => https://media.com/135f3b7.jpg

=== 编辑 === 从选定的答案来看,我已经能够实现我所追求的基本目标了。

        $new_array = array();
        foreach($data as $a){
            if(substr( $a, 0, 4 ) === "http"){
                array_push($new_array, $a);
            }
        }

结果,$new_array 现在给了我

Array
(
    [0] => https://media.com/0f48c22.jpg
Kanngiesser
    [1] => https://media.com/135f3b7.jpg
Mostovoy

因此,脚本似乎将当前行的最后一个字段和下一行的第一个字段视为一个字段。

【问题讨论】:

  • 我的懒惰方式:循环并检查值是否以“http”开头
  • $urls = preg_grep('/^http/', $array);
  • 不确定这个问题的标题是否准确。 “Every nth”暗示了“每 6 个”之类的意思,但是您的示例听起来像是您想要具有特定值的元素。你能澄清一下吗?
  • @mopo922 正确。 OP 的问题建议第 6 项和第 24 项也应包含 URL。这可以通过除以余数(%)然后
  • 如果你真的在 url 之后最好检查一下,以防有一天输入发生变化

标签: php arrays csv foreach while-loop


【解决方案1】:

您可以使用substr 来检测字符串开头的http

$new_array = array();
foreach($old_array as $a){
    if(substr( $a, 0, 4 ) === "http"){
        array_push($new_array, $a);
    }
}

【讨论】:

  • 我相信 $new_array[] = $a 稍微快一些,因为它避免了函数调用,但我赞成这个答案用于代码格式化。 (另外请注意,如果 $new_array 未定义,它不会抛出错误......这不一定是一件好事)
  • @RonakPatel 你知道为什么脚本会抓取 URL(每行的最后一个字段)和下一行的第一个字段吗?
  • @jeffimperial :你这是什么意思?您想从数组中获取所有URLs。对吗?
  • @RonakPatel 是的,这是我想要的 URL。但是由于某种原因,如果我尝试使用$new_array[1],它会返回 url 加上下一行第一个字段的值。就好像脚本没有检测换行符(表示单独的行,作为数组中的单独项目处理)
【解决方案2】:
$new=array();
foreach ($array as $check){

if(substr($check,0,4)=='http')
$new[]=$check;
}

【讨论】:

  • substr($check, 0, 4);*
猜你喜欢
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多